pdfjs-dist 2.0.943 → 2.4.456

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pdfjs-dist might be problematic. Click here for more details.

Files changed (192) hide show
  1. package/CODE_OF_CONDUCT.md +15 -0
  2. package/README.md +4 -0
  3. package/bower.json +1 -1
  4. package/build/pdf.js +8286 -14230
  5. package/build/pdf.js.map +1 -1
  6. package/build/pdf.min.js +22 -1
  7. package/build/pdf.worker.entry.js +5 -3
  8. package/build/pdf.worker.js +25500 -26628
  9. package/build/pdf.worker.js.map +1 -1
  10. package/build/pdf.worker.min.js +22 -1
  11. package/es5/build/pdf.js +25473 -0
  12. package/es5/build/pdf.js.map +1 -0
  13. package/{lib/shared/global_scope.js → es5/build/pdf.worker.entry.js} +5 -10
  14. package/es5/build/pdf.worker.js +57878 -0
  15. package/es5/build/pdf.worker.js.map +1 -0
  16. package/es5/web/images/annotation-check.svg +11 -0
  17. package/es5/web/images/annotation-comment.svg +16 -0
  18. package/es5/web/images/annotation-help.svg +26 -0
  19. package/es5/web/images/annotation-insert.svg +10 -0
  20. package/es5/web/images/annotation-key.svg +11 -0
  21. package/es5/web/images/annotation-newparagraph.svg +11 -0
  22. package/es5/web/images/annotation-noicon.svg +7 -0
  23. package/es5/web/images/annotation-note.svg +42 -0
  24. package/es5/web/images/annotation-paragraph.svg +16 -0
  25. package/es5/web/images/loading-icon.gif +0 -0
  26. package/es5/web/images/shadow.png +0 -0
  27. package/es5/web/images/texture.png +0 -0
  28. package/es5/web/pdf_viewer.css +407 -0
  29. package/es5/web/pdf_viewer.js +7757 -0
  30. package/es5/web/pdf_viewer.js.map +1 -0
  31. package/image_decoders/pdf.image_decoders.js +2887 -4094
  32. package/image_decoders/pdf.image_decoders.js.map +1 -1
  33. package/image_decoders/pdf.image_decoders.min.js +22 -1
  34. package/lib/README.md +7 -0
  35. package/lib/core/annotation.js +855 -778
  36. package/lib/core/arithmetic_decoder.js +325 -311
  37. package/lib/core/bidi.js +117 -50
  38. package/lib/core/ccitt.js +251 -89
  39. package/lib/core/ccitt_stream.js +26 -16
  40. package/lib/core/cff_parser.js +525 -197
  41. package/lib/core/charsets.js +6 -5
  42. package/lib/core/chunked_stream.js +541 -406
  43. package/lib/core/cmap.js +368 -253
  44. package/lib/core/colorspace.js +781 -800
  45. package/lib/core/core_utils.js +152 -0
  46. package/lib/core/crypto.js +609 -422
  47. package/lib/core/document.js +649 -481
  48. package/lib/core/encodings.js +33 -24
  49. package/lib/core/evaluator.js +1471 -736
  50. package/lib/core/font_renderer.js +289 -149
  51. package/lib/core/fonts.js +1067 -413
  52. package/lib/core/function.js +517 -287
  53. package/lib/core/glyphlist.js +4529 -4527
  54. package/lib/core/image.js +232 -114
  55. package/lib/core/image_utils.js +94 -0
  56. package/lib/core/jbig2.js +711 -342
  57. package/lib/core/jbig2_stream.js +31 -19
  58. package/lib/core/jpeg_stream.js +151 -26
  59. package/lib/core/jpg.js +433 -181
  60. package/lib/core/jpx.js +551 -143
  61. package/lib/core/jpx_stream.js +40 -28
  62. package/lib/core/metrics.js +2931 -2931
  63. package/lib/core/murmurhash3.js +104 -97
  64. package/lib/core/obj.js +1561 -1053
  65. package/lib/core/operator_list.js +192 -64
  66. package/lib/core/parser.js +1162 -864
  67. package/lib/core/pattern.js +224 -75
  68. package/lib/core/pdf_manager.js +154 -285
  69. package/lib/core/primitives.js +145 -69
  70. package/lib/core/ps_parser.js +212 -162
  71. package/lib/core/standard_fonts.js +245 -244
  72. package/lib/core/stream.js +353 -81
  73. package/lib/core/type1_parser.js +218 -68
  74. package/lib/core/unicode.js +1682 -1655
  75. package/lib/core/worker.js +233 -302
  76. package/lib/core/worker_stream.js +168 -0
  77. package/lib/display/annotation_layer.js +808 -862
  78. package/lib/display/api.js +1778 -1462
  79. package/lib/display/api_compatibility.js +14 -9
  80. package/lib/display/canvas.js +463 -140
  81. package/lib/display/content_disposition.js +86 -58
  82. package/lib/display/display_utils.js +524 -0
  83. package/lib/display/fetch_stream.js +202 -274
  84. package/lib/display/font_loader.js +311 -333
  85. package/lib/display/metadata.js +98 -88
  86. package/lib/display/network.js +343 -347
  87. package/lib/display/network_utils.js +46 -26
  88. package/lib/display/node_stream.js +326 -404
  89. package/lib/display/pattern_helper.js +168 -69
  90. package/lib/display/svg.js +1296 -885
  91. package/lib/display/text_layer.js +229 -103
  92. package/lib/display/transport_stream.js +290 -250
  93. package/lib/display/webgl.js +116 -83
  94. package/lib/display/worker_options.js +6 -5
  95. package/lib/display/xml_parser.js +358 -337
  96. package/lib/examples/node/domstubs.js +95 -39
  97. package/lib/pdf.js +49 -31
  98. package/lib/pdf.worker.js +7 -5
  99. package/lib/shared/compatibility.js +3 -145
  100. package/lib/shared/is_node.js +8 -7
  101. package/lib/shared/message_handler.js +367 -314
  102. package/lib/shared/util.js +421 -415
  103. package/lib/test/unit/annotation_spec.js +1570 -690
  104. package/lib/test/unit/api_spec.js +855 -493
  105. package/lib/test/unit/bidi_spec.js +12 -12
  106. package/lib/test/unit/cff_parser_spec.js +88 -61
  107. package/lib/test/unit/clitests_helper.js +9 -12
  108. package/lib/test/unit/cmap_spec.js +140 -88
  109. package/lib/test/unit/colorspace_spec.js +204 -152
  110. package/lib/test/unit/core_utils_spec.js +211 -0
  111. package/lib/test/unit/crypto_spec.js +194 -182
  112. package/lib/test/unit/custom_spec.js +50 -64
  113. package/lib/test/unit/display_svg_spec.js +53 -38
  114. package/lib/test/unit/display_utils_spec.js +263 -0
  115. package/lib/test/unit/document_spec.js +17 -22
  116. package/lib/test/unit/encodings_spec.js +15 -57
  117. package/lib/test/unit/evaluator_spec.js +90 -83
  118. package/lib/test/unit/fetch_stream_spec.js +111 -0
  119. package/lib/test/unit/function_spec.js +219 -205
  120. package/lib/test/unit/jasmine-boot.js +68 -39
  121. package/lib/test/unit/message_handler_spec.js +187 -160
  122. package/lib/test/unit/metadata_spec.js +87 -34
  123. package/lib/test/unit/murmurhash3_spec.js +13 -13
  124. package/lib/test/unit/network_spec.js +26 -59
  125. package/lib/test/unit/network_utils_spec.js +187 -121
  126. package/lib/test/unit/node_stream_spec.js +98 -90
  127. package/lib/test/unit/parser_spec.js +173 -131
  128. package/lib/test/unit/pdf_find_controller_spec.js +148 -67
  129. package/lib/test/unit/pdf_find_utils_spec.js +35 -34
  130. package/lib/test/unit/pdf_history_spec.js +45 -33
  131. package/lib/test/unit/primitives_spec.js +161 -126
  132. package/lib/test/unit/stream_spec.js +22 -15
  133. package/lib/test/unit/test_utils.js +149 -98
  134. package/lib/test/unit/testreporter.js +36 -18
  135. package/lib/test/unit/type1_parser_spec.js +46 -44
  136. package/lib/test/unit/ui_utils_spec.js +388 -372
  137. package/lib/test/unit/unicode_spec.js +49 -46
  138. package/lib/test/unit/util_spec.js +144 -248
  139. package/lib/web/annotation_layer_builder.js +75 -95
  140. package/lib/web/app.js +1538 -1147
  141. package/lib/web/app_options.js +116 -104
  142. package/lib/web/base_viewer.js +950 -775
  143. package/lib/web/chromecom.js +217 -225
  144. package/lib/web/debugger.js +236 -148
  145. package/lib/web/download_manager.js +50 -50
  146. package/lib/web/firefox_print_service.js +51 -33
  147. package/lib/web/firefoxcom.js +225 -352
  148. package/lib/web/genericcom.js +30 -93
  149. package/lib/web/genericl10n.js +26 -143
  150. package/lib/web/grab_to_pan.js +57 -33
  151. package/lib/web/interfaces.js +105 -232
  152. package/lib/web/overlay_manager.js +73 -227
  153. package/lib/web/password_prompt.js +44 -62
  154. package/lib/web/pdf_attachment_viewer.js +118 -123
  155. package/lib/web/pdf_cursor_tools.js +89 -93
  156. package/lib/web/pdf_document_properties.js +242 -281
  157. package/lib/web/pdf_find_bar.js +157 -163
  158. package/lib/web/pdf_find_controller.js +598 -454
  159. package/lib/web/pdf_find_utils.js +32 -16
  160. package/lib/web/pdf_history.js +481 -355
  161. package/lib/web/pdf_link_service.js +355 -323
  162. package/lib/web/pdf_outline_viewer.js +167 -152
  163. package/lib/web/pdf_page_view.js +511 -457
  164. package/lib/web/pdf_presentation_mode.js +347 -335
  165. package/lib/web/pdf_print_service.js +133 -103
  166. package/lib/web/pdf_rendering_queue.js +98 -100
  167. package/lib/web/pdf_sidebar.js +323 -299
  168. package/lib/web/pdf_sidebar_resizer.js +107 -108
  169. package/lib/web/pdf_single_page_viewer.js +94 -146
  170. package/lib/web/pdf_thumbnail_view.js +319 -269
  171. package/lib/web/pdf_thumbnail_viewer.js +219 -199
  172. package/lib/web/pdf_viewer.component.js +111 -32
  173. package/lib/web/pdf_viewer.js +61 -101
  174. package/lib/web/preferences.js +87 -272
  175. package/lib/web/secondary_toolbar.js +207 -220
  176. package/lib/web/text_layer_builder.js +322 -322
  177. package/lib/web/toolbar.js +227 -180
  178. package/lib/web/ui_utils.js +476 -421
  179. package/lib/web/view_history.js +59 -208
  180. package/lib/web/viewer_compatibility.js +9 -6
  181. package/package.json +2 -9
  182. package/web/pdf_viewer.css +36 -22
  183. package/web/pdf_viewer.js +4407 -4516
  184. package/web/pdf_viewer.js.map +1 -1
  185. package/webpack.js +14 -5
  186. package/external/streams/streams-lib.js +0 -3962
  187. package/external/url/url-lib.js +0 -627
  188. package/lib/display/dom_utils.js +0 -441
  189. package/lib/shared/streams_polyfill.js +0 -39
  190. package/lib/shared/url_polyfill.js +0 -50
  191. package/lib/test/unit/dom_utils_spec.js +0 -89
  192. package/lib/web/dom_events.js +0 -140
@@ -2,7 +2,7 @@
2
2
  * @licstart The following is the entire license notice for the
3
3
  * Javascript code in this page
4
4
  *
5
- * Copyright 2018 Mozilla Foundation
5
+ * Copyright 2020 Mozilla Foundation
6
6
  *
7
7
  * Licensed under the Apache License, Version 2.0 (the "License");
8
8
  * you may not use this file except in compliance with the License.
@@ -19,42 +19,62 @@
19
19
  * @licend The above is the entire license notice for the
20
20
  * Javascript code in this page
21
21
  */
22
- 'use strict';
22
+ "use strict";
23
23
 
24
24
  Object.defineProperty(exports, "__esModule", {
25
25
  value: true
26
26
  });
27
- exports.TilingPattern = exports.getShadingPatternFromIR = undefined;
27
+ exports.getShadingPatternFromIR = getShadingPatternFromIR;
28
+ exports.TilingPattern = void 0;
28
29
 
29
- var _util = require('../shared/util');
30
+ var _util = require("../shared/util.js");
30
31
 
31
32
  var ShadingIRs = {};
33
+
34
+ function applyBoundingBox(ctx, bbox) {
35
+ if (!bbox || typeof Path2D === "undefined") {
36
+ return;
37
+ }
38
+
39
+ const width = bbox[2] - bbox[0];
40
+ const height = bbox[3] - bbox[1];
41
+ const region = new Path2D();
42
+ region.rect(bbox[0], bbox[1], width, height);
43
+ ctx.clip(region);
44
+ }
45
+
32
46
  ShadingIRs.RadialAxial = {
33
47
  fromIR: function RadialAxial_fromIR(raw) {
34
48
  var type = raw[1];
35
- var colorStops = raw[2];
36
- var p0 = raw[3];
37
- var p1 = raw[4];
38
- var r0 = raw[5];
39
- var r1 = raw[6];
49
+ var bbox = raw[2];
50
+ var colorStops = raw[3];
51
+ var p0 = raw[4];
52
+ var p1 = raw[5];
53
+ var r0 = raw[6];
54
+ var r1 = raw[7];
40
55
  return {
41
- type: 'Pattern',
56
+ type: "Pattern",
42
57
  getPattern: function RadialAxial_getPattern(ctx) {
58
+ applyBoundingBox(ctx, bbox);
43
59
  var grad;
44
- if (type === 'axial') {
60
+
61
+ if (type === "axial") {
45
62
  grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]);
46
- } else if (type === 'radial') {
63
+ } else if (type === "radial") {
47
64
  grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1);
48
65
  }
66
+
49
67
  for (var i = 0, ii = colorStops.length; i < ii; ++i) {
50
68
  var c = colorStops[i];
51
69
  grad.addColorStop(c[0], c[1]);
52
70
  }
71
+
53
72
  return grad;
54
73
  }
55
74
  };
56
75
  }
57
76
  };
77
+
58
78
  var createMeshCanvas = function createMeshCanvasClosure() {
59
79
  function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {
60
80
  var coords = context.coords,
@@ -62,6 +82,7 @@ var createMeshCanvas = function createMeshCanvasClosure() {
62
82
  var bytes = data.data,
63
83
  rowSize = data.width * 4;
64
84
  var tmp;
85
+
65
86
  if (coords[p1 + 1] > coords[p2 + 1]) {
66
87
  tmp = p1;
67
88
  p1 = p2;
@@ -70,6 +91,7 @@ var createMeshCanvas = function createMeshCanvasClosure() {
70
91
  c1 = c2;
71
92
  c2 = tmp;
72
93
  }
94
+
73
95
  if (coords[p2 + 1] > coords[p3 + 1]) {
74
96
  tmp = p2;
75
97
  p2 = p3;
@@ -78,6 +100,7 @@ var createMeshCanvas = function createMeshCanvasClosure() {
78
100
  c2 = c3;
79
101
  c3 = tmp;
80
102
  }
103
+
81
104
  if (coords[p1 + 1] > coords[p2 + 1]) {
82
105
  tmp = p1;
83
106
  p1 = p2;
@@ -86,15 +109,18 @@ var createMeshCanvas = function createMeshCanvasClosure() {
86
109
  c1 = c2;
87
110
  c2 = tmp;
88
111
  }
112
+
89
113
  var x1 = (coords[p1] + context.offsetX) * context.scaleX;
90
114
  var y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;
91
115
  var x2 = (coords[p2] + context.offsetX) * context.scaleX;
92
116
  var y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;
93
117
  var x3 = (coords[p3] + context.offsetX) * context.scaleX;
94
118
  var y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;
119
+
95
120
  if (y1 >= y3) {
96
121
  return;
97
122
  }
123
+
98
124
  var c1r = colors[c1],
99
125
  c1g = colors[c1 + 1],
100
126
  c1b = colors[c1 + 2];
@@ -108,22 +134,50 @@ var createMeshCanvas = function createMeshCanvasClosure() {
108
134
  maxY = Math.round(y3);
109
135
  var xa, car, cag, cab;
110
136
  var xb, cbr, cbg, cbb;
111
- var k;
137
+
112
138
  for (var y = minY; y <= maxY; y++) {
113
139
  if (y < y2) {
114
- k = y < y1 ? 0 : y1 === y2 ? 1 : (y1 - y) / (y1 - y2);
140
+ let k;
141
+
142
+ if (y < y1) {
143
+ k = 0;
144
+ } else if (y1 === y2) {
145
+ k = 1;
146
+ } else {
147
+ k = (y1 - y) / (y1 - y2);
148
+ }
149
+
115
150
  xa = x1 - (x1 - x2) * k;
116
151
  car = c1r - (c1r - c2r) * k;
117
152
  cag = c1g - (c1g - c2g) * k;
118
153
  cab = c1b - (c1b - c2b) * k;
119
154
  } else {
120
- k = y > y3 ? 1 : y2 === y3 ? 0 : (y2 - y) / (y2 - y3);
155
+ let k;
156
+
157
+ if (y > y3) {
158
+ k = 1;
159
+ } else if (y2 === y3) {
160
+ k = 0;
161
+ } else {
162
+ k = (y2 - y) / (y2 - y3);
163
+ }
164
+
121
165
  xa = x2 - (x2 - x3) * k;
122
166
  car = c2r - (c2r - c3r) * k;
123
167
  cag = c2g - (c2g - c3g) * k;
124
168
  cab = c2b - (c2b - c3b) * k;
125
169
  }
126
- k = y < y1 ? 0 : y > y3 ? 1 : (y1 - y) / (y1 - y3);
170
+
171
+ let k;
172
+
173
+ if (y < y1) {
174
+ k = 0;
175
+ } else if (y > y3) {
176
+ k = 1;
177
+ } else {
178
+ k = (y1 - y) / (y1 - y3);
179
+ }
180
+
127
181
  xb = x1 - (x1 - x3) * k;
128
182
  cbr = c1r - (c1r - c3r) * k;
129
183
  cbg = c1g - (c1g - c3g) * k;
@@ -131,9 +185,16 @@ var createMeshCanvas = function createMeshCanvasClosure() {
131
185
  var x1_ = Math.round(Math.min(xa, xb));
132
186
  var x2_ = Math.round(Math.max(xa, xb));
133
187
  var j = rowSize * y + x1_ * 4;
188
+
134
189
  for (var x = x1_; x <= x2_; x++) {
135
- k = (xa - x) / (xa - xb);
136
- k = k < 0 ? 0 : k > 1 ? 1 : k;
190
+ let k = (xa - x) / (xa - xb);
191
+
192
+ if (k < 0) {
193
+ k = 0;
194
+ } else if (k > 1) {
195
+ k = 1;
196
+ }
197
+
137
198
  bytes[j++] = car - (car - cbr) * k | 0;
138
199
  bytes[j++] = cag - (cag - cbg) * k | 0;
139
200
  bytes[j++] = cab - (cab - cbb) * k | 0;
@@ -141,32 +202,41 @@ var createMeshCanvas = function createMeshCanvasClosure() {
141
202
  }
142
203
  }
143
204
  }
205
+
144
206
  function drawFigure(data, figure, context) {
145
207
  var ps = figure.coords;
146
208
  var cs = figure.colors;
147
209
  var i, ii;
210
+
148
211
  switch (figure.type) {
149
- case 'lattice':
212
+ case "lattice":
150
213
  var verticesPerRow = figure.verticesPerRow;
151
214
  var rows = Math.floor(ps.length / verticesPerRow) - 1;
152
215
  var cols = verticesPerRow - 1;
216
+
153
217
  for (i = 0; i < rows; i++) {
154
218
  var q = i * verticesPerRow;
219
+
155
220
  for (var j = 0; j < cols; j++, q++) {
156
221
  drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]);
157
222
  drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]);
158
223
  }
159
224
  }
225
+
160
226
  break;
161
- case 'triangles':
227
+
228
+ case "triangles":
162
229
  for (i = 0, ii = ps.length; i < ii; i += 3) {
163
230
  drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]);
164
231
  }
232
+
165
233
  break;
234
+
166
235
  default:
167
- throw new Error('illegal figure');
236
+ throw new Error("illegal figure");
168
237
  }
169
238
  }
239
+
170
240
  function createMeshCanvas(bounds, combinesScale, coords, colors, figures, backgroundColor, cachedCanvases, webGLContext) {
171
241
  var EXPECTED_SCALE = 1.1;
172
242
  var MAX_PATTERN_SIZE = 3000;
@@ -180,8 +250,8 @@ var createMeshCanvas = function createMeshCanvasClosure() {
180
250
  var scaleX = boundsWidth / width;
181
251
  var scaleY = boundsHeight / height;
182
252
  var context = {
183
- coords: coords,
184
- colors: colors,
253
+ coords,
254
+ colors,
185
255
  offsetX: -offsetX,
186
256
  offsetY: -offsetY,
187
257
  scaleX: 1 / scaleX,
@@ -190,23 +260,26 @@ var createMeshCanvas = function createMeshCanvasClosure() {
190
260
  var paddedWidth = width + BORDER_SIZE * 2;
191
261
  var paddedHeight = height + BORDER_SIZE * 2;
192
262
  var canvas, tmpCanvas, i, ii;
263
+
193
264
  if (webGLContext.isEnabled) {
194
265
  canvas = webGLContext.drawFigures({
195
- width: width,
196
- height: height,
197
- backgroundColor: backgroundColor,
198
- figures: figures,
199
- context: context
266
+ width,
267
+ height,
268
+ backgroundColor,
269
+ figures,
270
+ context
200
271
  });
201
- tmpCanvas = cachedCanvases.getCanvas('mesh', paddedWidth, paddedHeight, false);
272
+ tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false);
202
273
  tmpCanvas.context.drawImage(canvas, BORDER_SIZE, BORDER_SIZE);
203
274
  canvas = tmpCanvas.canvas;
204
275
  } else {
205
- tmpCanvas = cachedCanvases.getCanvas('mesh', paddedWidth, paddedHeight, false);
276
+ tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false);
206
277
  var tmpCtx = tmpCanvas.context;
207
278
  var data = tmpCtx.createImageData(width, height);
279
+
208
280
  if (backgroundColor) {
209
281
  var bytes = data.data;
282
+
210
283
  for (i = 0, ii = bytes.length; i < ii; i += 4) {
211
284
  bytes[i] = backgroundColor[0];
212
285
  bytes[i + 1] = backgroundColor[1];
@@ -214,22 +287,27 @@ var createMeshCanvas = function createMeshCanvasClosure() {
214
287
  bytes[i + 3] = 255;
215
288
  }
216
289
  }
290
+
217
291
  for (i = 0; i < figures.length; i++) {
218
292
  drawFigure(data, figures[i], context);
219
293
  }
294
+
220
295
  tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE);
221
296
  canvas = tmpCanvas.canvas;
222
297
  }
298
+
223
299
  return {
224
- canvas: canvas,
300
+ canvas,
225
301
  offsetX: offsetX - BORDER_SIZE * scaleX,
226
302
  offsetY: offsetY - BORDER_SIZE * scaleY,
227
- scaleX: scaleX,
228
- scaleY: scaleY
303
+ scaleX,
304
+ scaleY
229
305
  };
230
306
  }
307
+
231
308
  return createMeshCanvas;
232
309
  }();
310
+
233
311
  ShadingIRs.Mesh = {
234
312
  fromIR: function Mesh_fromIR(raw) {
235
313
  var coords = raw[2];
@@ -237,30 +315,39 @@ ShadingIRs.Mesh = {
237
315
  var figures = raw[4];
238
316
  var bounds = raw[5];
239
317
  var matrix = raw[6];
318
+ var bbox = raw[7];
240
319
  var background = raw[8];
241
320
  return {
242
- type: 'Pattern',
321
+ type: "Pattern",
243
322
  getPattern: function Mesh_getPattern(ctx, owner, shadingFill) {
323
+ applyBoundingBox(ctx, bbox);
244
324
  var scale;
325
+
245
326
  if (shadingFill) {
246
327
  scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform);
247
328
  } else {
248
329
  scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform);
330
+
249
331
  if (matrix) {
250
332
  var matrixScale = _util.Util.singularValueDecompose2dScale(matrix);
333
+
251
334
  scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]];
252
335
  }
253
336
  }
337
+
254
338
  var temporaryPatternCanvas = createMeshCanvas(bounds, scale, coords, colors, figures, shadingFill ? null : background, owner.cachedCanvases, owner.webGLContext);
339
+
255
340
  if (!shadingFill) {
256
341
  ctx.setTransform.apply(ctx, owner.baseTransform);
342
+
257
343
  if (matrix) {
258
344
  ctx.transform.apply(ctx, matrix);
259
345
  }
260
346
  }
347
+
261
348
  ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);
262
349
  ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);
263
- return ctx.createPattern(temporaryPatternCanvas.canvas, 'no-repeat');
350
+ return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat");
264
351
  }
265
352
  };
266
353
  }
@@ -268,26 +355,31 @@ ShadingIRs.Mesh = {
268
355
  ShadingIRs.Dummy = {
269
356
  fromIR: function Dummy_fromIR() {
270
357
  return {
271
- type: 'Pattern',
358
+ type: "Pattern",
272
359
  getPattern: function Dummy_fromIR_getPattern() {
273
- return 'hotpink';
360
+ return "hotpink";
274
361
  }
275
362
  };
276
363
  }
277
364
  };
365
+
278
366
  function getShadingPatternFromIR(raw) {
279
367
  var shadingIR = ShadingIRs[raw[0]];
368
+
280
369
  if (!shadingIR) {
281
- throw new Error('Unknown IR type: ' + raw[0]);
370
+ throw new Error(`Unknown IR type: ${raw[0]}`);
282
371
  }
372
+
283
373
  return shadingIR.fromIR(raw);
284
374
  }
375
+
285
376
  var TilingPattern = function TilingPatternClosure() {
286
377
  var PaintType = {
287
378
  COLORED: 1,
288
379
  UNCOLORED: 2
289
380
  };
290
381
  var MAX_PATTERN_SIZE = 3000;
382
+
291
383
  function TilingPattern(IR, color, ctx, canvasGraphicsFactory, baseTransform) {
292
384
  this.operatorList = IR[2];
293
385
  this.matrix = IR[3] || [1, 0, 0, 1, 0, 0];
@@ -299,9 +391,10 @@ var TilingPattern = function TilingPatternClosure() {
299
391
  this.color = color;
300
392
  this.canvasGraphicsFactory = canvasGraphicsFactory;
301
393
  this.baseTransform = baseTransform;
302
- this.type = 'Pattern';
394
+ this.type = "Pattern";
303
395
  this.ctx = ctx;
304
396
  }
397
+
305
398
  TilingPattern.prototype = {
306
399
  createPatternCanvas: function TilinPattern_createPatternCanvas(owner) {
307
400
  var operatorList = this.operatorList;
@@ -312,44 +405,47 @@ var TilingPattern = function TilingPatternClosure() {
312
405
  var tilingType = this.tilingType;
313
406
  var color = this.color;
314
407
  var canvasGraphicsFactory = this.canvasGraphicsFactory;
315
- (0, _util.info)('TilingType: ' + tilingType);
408
+ (0, _util.info)("TilingType: " + tilingType);
316
409
  var x0 = bbox[0],
317
410
  y0 = bbox[1],
318
411
  x1 = bbox[2],
319
412
  y1 = bbox[3];
320
- var topLeft = [x0, y0];
321
- var botRight = [x0 + xstep, y0 + ystep];
322
- var width = botRight[0] - topLeft[0];
323
- var height = botRight[1] - topLeft[1];
413
+
324
414
  var matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix);
415
+
325
416
  var curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform);
417
+
326
418
  var combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]];
327
- width = Math.min(Math.ceil(Math.abs(width * combinedScale[0])), MAX_PATTERN_SIZE);
328
- height = Math.min(Math.ceil(Math.abs(height * combinedScale[1])), MAX_PATTERN_SIZE);
329
- var tmpCanvas = owner.cachedCanvases.getCanvas('pattern', width, height, true);
419
+ var dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]);
420
+ var dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]);
421
+ var tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true);
330
422
  var tmpCtx = tmpCanvas.context;
331
423
  var graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);
332
424
  graphics.groupLevel = owner.groupLevel;
333
425
  this.setFillAndStrokeStyleToContext(graphics, paintType, color);
334
- this.setScale(width, height, xstep, ystep);
335
- this.transformToScale(graphics);
336
- var tmpTranslate = [1, 0, 0, 1, -topLeft[0], -topLeft[1]];
337
- graphics.transform.apply(graphics, tmpTranslate);
426
+ graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0);
427
+ graphics.transform(1, 0, 0, 1, -x0, -y0);
338
428
  this.clipBbox(graphics, bbox, x0, y0, x1, y1);
339
429
  graphics.executeOperatorList(operatorList);
430
+ this.ctx.transform(1, 0, 0, 1, x0, y0);
431
+ this.ctx.scale(1 / dimx.scale, 1 / dimy.scale);
340
432
  return tmpCanvas.canvas;
341
433
  },
342
- setScale: function TilingPattern_setScale(width, height, xstep, ystep) {
343
- this.scale = [width / xstep, height / ystep];
344
- },
345
- transformToScale: function TilingPattern_transformToScale(graphics) {
346
- var scale = this.scale;
347
- var tmpScale = [scale[0], 0, 0, scale[1], 0, 0];
348
- graphics.transform.apply(graphics, tmpScale);
349
- },
350
- scaleToContext: function TilingPattern_scaleToContext() {
351
- var scale = this.scale;
352
- this.ctx.scale(1 / scale[0], 1 / scale[1]);
434
+ getSizeAndScale: function TilingPattern_getSizeAndScale(step, realOutputSize, scale) {
435
+ step = Math.abs(step);
436
+ var maxSize = Math.max(MAX_PATTERN_SIZE, realOutputSize);
437
+ var size = Math.ceil(step * scale);
438
+
439
+ if (size >= maxSize) {
440
+ size = maxSize;
441
+ } else {
442
+ scale = size / step;
443
+ }
444
+
445
+ return {
446
+ scale,
447
+ size
448
+ };
353
449
  },
354
450
  clipBbox: function clipBbox(graphics, bbox, x0, y0, x1, y1) {
355
451
  if (Array.isArray(bbox) && bbox.length === 4) {
@@ -361,8 +457,9 @@ var TilingPattern = function TilingPatternClosure() {
361
457
  }
362
458
  },
363
459
  setFillAndStrokeStyleToContext: function setFillAndStrokeStyleToContext(graphics, paintType, color) {
364
- var context = graphics.ctx,
365
- current = graphics.current;
460
+ const context = graphics.ctx,
461
+ current = graphics.current;
462
+
366
463
  switch (paintType) {
367
464
  case PaintType.COLORED:
368
465
  var ctx = this.ctx;
@@ -371,27 +468,29 @@ var TilingPattern = function TilingPatternClosure() {
371
468
  current.fillColor = ctx.fillStyle;
372
469
  current.strokeColor = ctx.strokeStyle;
373
470
  break;
471
+
374
472
  case PaintType.UNCOLORED:
375
473
  var cssColor = _util.Util.makeCssRgb(color[0], color[1], color[2]);
474
+
376
475
  context.fillStyle = cssColor;
377
476
  context.strokeStyle = cssColor;
378
477
  current.fillColor = cssColor;
379
478
  current.strokeColor = cssColor;
380
479
  break;
480
+
381
481
  default:
382
- throw new _util.FormatError('Unsupported paint type: ' + paintType);
482
+ throw new _util.FormatError(`Unsupported paint type: ${paintType}`);
383
483
  }
384
484
  },
385
485
  getPattern: function TilingPattern_getPattern(ctx, owner) {
386
- var temporaryPatternCanvas = this.createPatternCanvas(owner);
387
486
  ctx = this.ctx;
388
487
  ctx.setTransform.apply(ctx, this.baseTransform);
389
488
  ctx.transform.apply(ctx, this.matrix);
390
- this.scaleToContext();
391
- return ctx.createPattern(temporaryPatternCanvas, 'repeat');
489
+ var temporaryPatternCanvas = this.createPatternCanvas(owner);
490
+ return ctx.createPattern(temporaryPatternCanvas, "repeat");
392
491
  }
393
492
  };
394
493
  return TilingPattern;
395
494
  }();
396
- exports.getShadingPatternFromIR = getShadingPatternFromIR;
495
+
397
496
  exports.TilingPattern = TilingPattern;