reamkit 1.7.0 → 1.9.0

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.
Files changed (36) hide show
  1. package/README.md +13 -1
  2. package/dist/esm/core/converter/ream.d.ts +1 -0
  3. package/dist/esm/core/converter/ream.js +1 -1
  4. package/dist/esm/core/document-model/types.d.ts +3 -1
  5. package/dist/esm/core/drawingml/shape-render.d.ts +3 -1
  6. package/dist/esm/core/drawingml/shape-render.js +27 -1
  7. package/dist/esm/core/vector.d.ts +10 -0
  8. package/dist/esm/html/html-writer.js +4 -2
  9. package/dist/esm/layout/styled-layout.js +5 -2
  10. package/dist/esm/pdf/shading.d.ts +12 -0
  11. package/dist/esm/pdf/shading.js +152 -0
  12. package/dist/esm/pdf/styled-page-emitter.js +29 -4
  13. package/dist/esm/pdf/vector-graphics.d.ts +1 -1
  14. package/dist/esm/pdf/vector-graphics.js +5 -3
  15. package/dist/esm/pdf-reader/ccitt.d.ts +15 -0
  16. package/dist/esm/pdf-reader/ccitt.js +394 -0
  17. package/dist/esm/pdf-reader/content.d.ts +6 -2
  18. package/dist/esm/pdf-reader/content.js +54 -13
  19. package/dist/esm/pdf-reader/decrypt.d.ts +1 -1
  20. package/dist/esm/pdf-reader/decrypt.js +20 -8
  21. package/dist/esm/pdf-reader/document.d.ts +1 -1
  22. package/dist/esm/pdf-reader/document.js +4 -4
  23. package/dist/esm/pdf-reader/flow-build.js +17 -6
  24. package/dist/esm/pdf-reader/image-decode.js +115 -7
  25. package/dist/esm/pdf-reader/layout.js +45 -7
  26. package/dist/esm/pdf-reader/reader.d.ts +1 -1
  27. package/dist/esm/pdf-reader/reader.js +5 -5
  28. package/dist/esm/pdf-reader/shading.d.ts +3 -0
  29. package/dist/esm/pdf-reader/shading.js +147 -0
  30. package/dist/esm/pdf-reader/text.js +47 -13
  31. package/dist/esm/pdf-reader/vector.d.ts +5 -1
  32. package/dist/esm/pdf-reader/vector.js +15 -6
  33. package/dist/esm/svg/svg-writer.js +12 -5
  34. package/dist/esm/word/docx-writer.js +8 -1
  35. package/dist/esm/word/drawing-parser.js +28 -17
  36. package/package.json +1 -1
@@ -353,10 +353,10 @@ function parseFill(spPr, resolveColor) {
353
353
  } : { kind: "none" };
354
354
  }
355
355
  if (poIs(child, "a:gradFill")) {
356
- const hex = colorFromGradient(child, resolveColor);
357
- return hex ? {
358
- kind: "solid",
359
- colorHex: hex
356
+ const gradient = parseGradient(child, resolveColor);
357
+ return gradient ? {
358
+ kind: "gradient",
359
+ gradient
360
360
  } : { kind: "none" };
361
361
  }
362
362
  }
@@ -404,13 +404,10 @@ function colorFromContainer(parent, resolveColor) {
404
404
  if (hex) return hex;
405
405
  }
406
406
  }
407
- function colorFromGradient(grad, resolveColor) {
407
+ function parseGradient(grad, resolveColor) {
408
408
  const gsLst = poChildren(grad).find((c) => poIs(c, "a:gsLst"));
409
409
  if (!gsLst) return void 0;
410
- let r = 0;
411
- let g = 0;
412
- let b = 0;
413
- let n = 0;
410
+ const stops = [];
414
411
  for (const gs of poChildren(gsLst)) {
415
412
  if (!poIs(gs, "a:gs")) continue;
416
413
  let hex;
@@ -419,15 +416,29 @@ function colorFromGradient(grad, resolveColor) {
419
416
  if (hex) break;
420
417
  }
421
418
  if (!hex) continue;
422
- const num = parseInt(hex, 16);
423
- r += num >> 16 & 255;
424
- g += num >> 8 & 255;
425
- b += num & 255;
426
- n++;
419
+ const pos = poIntAttr(gs, "pos");
420
+ const offset = pos !== void 0 ? clampUnit(pos / 1e5) : stops.length === 0 ? 0 : 1;
421
+ stops.push({
422
+ offset,
423
+ colorHex: hex
424
+ });
427
425
  }
428
- if (n === 0) return void 0;
429
- const toHex = (x) => Math.round(x / n).toString(16).padStart(2, "0");
430
- return (toHex(r) + toHex(g) + toHex(b)).toUpperCase();
426
+ if (stops.length === 0) return void 0;
427
+ stops.sort((a, b) => a.offset - b.offset);
428
+ if (poChildren(grad).some((c) => poIs(c, "a:path"))) return {
429
+ kind: "radial",
430
+ stops
431
+ };
432
+ const lin = poChildren(grad).find((c) => poIs(c, "a:lin"));
433
+ const ang = lin ? poIntAttr(lin, "ang") : void 0;
434
+ return {
435
+ kind: "linear",
436
+ angle: ang !== void 0 ? ang / 6e4 % 360 : 0,
437
+ stops
438
+ };
439
+ }
440
+ function clampUnit(x) {
441
+ return x < 0 ? 0 : x > 1 ? 1 : x;
431
442
  }
432
443
  //#endregion
433
444
  export { expandMcChildren, parseDrawing, parseVmlPicture };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reamkit",
3
- "version": "1.7.0",
3
+ "version": "1.9.0",
4
4
  "description": "Ream — convert DOCX, XLSX and PDF to PDF, SVG, HTML, DOCX and XLSX, built from scratch on the ECMA-376 and ISO 32000 specifications. Parse once, convert anywhere.",
5
5
  "license": "MIT",
6
6
  "author": "Alex Krassavin <info@reamkit.dev>",