odf.js 6.2.0 → 6.3.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 (86) hide show
  1. package/README.md +22 -2
  2. package/dist/{cascade-BDkyOmoo.d.cts → cascade-BpMwrjkB.d.cts} +1 -1
  3. package/dist/{cascade-CaVinmvp.d.ts → cascade-PDS3hgrP.d.ts} +1 -1
  4. package/dist/{codec-B72LApRl.d.cts → codec-BnzBd5_I.d.cts} +10 -8
  5. package/dist/{codec-rbZGlr37.d.ts → codec-Dg_HWuH1.d.ts} +10 -8
  6. package/dist/codec.d.cts +1 -1
  7. package/dist/codec.d.ts +1 -1
  8. package/dist/{embedded-UQQNFd5U.js → embedded-BONPxvS3.js} +1 -2
  9. package/dist/{embedded-BsO-SvtW.cjs → embedded-wrtHCJ68.cjs} +1 -2
  10. package/dist/index.cjs +20 -1
  11. package/dist/index.d.cts +12 -10
  12. package/dist/index.d.ts +12 -10
  13. package/dist/index.js +9 -7
  14. package/dist/{list-DwTyo_B2.d.cts → list-Bttwr1mk.d.cts} +7 -1
  15. package/dist/{list-X_GJY7P3.d.ts → list-vhXd0Jf6.d.ts} +7 -1
  16. package/dist/metadata-BUzwE_-u.d.ts +10 -0
  17. package/dist/metadata-CYXgXL_h.d.cts +10 -0
  18. package/dist/ooo1/read.cjs +1 -1
  19. package/dist/ooo1/read.js +1 -1
  20. package/dist/package-io/scaffold.cjs +64 -0
  21. package/dist/package-io/scaffold.d.cts +2 -0
  22. package/dist/package-io/scaffold.d.ts +2 -0
  23. package/dist/package-io/scaffold.js +61 -0
  24. package/dist/paragraph-BdwsQisB.d.cts +28 -0
  25. package/dist/paragraph-BoVy1LrN.d.ts +28 -0
  26. package/dist/{registry-Dajfxsbz.d.ts → registry-C_16-N6i.d.ts} +2 -0
  27. package/dist/{registry-B-ZkdQv1.d.cts → registry-PoQIRgbY.d.cts} +2 -0
  28. package/dist/scaffold-44EIMGll.d.cts +8 -0
  29. package/dist/scaffold-ehGsIpZ5.d.ts +8 -0
  30. package/dist/{shapes-BCjeY90t.d.cts → shapes-BQhXAk0D.d.cts} +1 -1
  31. package/dist/{shapes-QkOsc-WT.d.ts → shapes-DUzrrf7b.d.ts} +1 -1
  32. package/dist/styles/properties.cjs +1 -1
  33. package/dist/styles/properties.js +2 -2
  34. package/dist/styles/registry.cjs +9 -6
  35. package/dist/styles/registry.d.cts +1 -1
  36. package/dist/styles/registry.d.ts +1 -1
  37. package/dist/styles/registry.js +9 -6
  38. package/dist/{table-CYvFMlP6.d.cts → table-ByhqRnSG.d.cts} +3 -1
  39. package/dist/{table-DclDgC5h.d.ts → table-DElqGcT0.d.ts} +3 -1
  40. package/dist/text-B8350HA2.d.ts +17 -0
  41. package/dist/text-pmlTqzgi.d.cts +17 -0
  42. package/dist/typed/draw/embedded.cjs +1 -1
  43. package/dist/typed/draw/embedded.js +1 -1
  44. package/dist/typed/draw/shapes.d.cts +1 -1
  45. package/dist/typed/draw/shapes.d.ts +1 -1
  46. package/dist/typed/odb/form.cjs +1 -1
  47. package/dist/typed/odb/form.js +1 -1
  48. package/dist/typed/ods/read.cjs +1 -1
  49. package/dist/typed/ods/read.js +1 -1
  50. package/dist/typed/odt/read.cjs +1 -1
  51. package/dist/typed/odt/read.js +1 -1
  52. package/dist/typed/odt/write.cjs +409 -0
  53. package/dist/typed/odt/write.d.cts +2 -0
  54. package/dist/typed/odt/write.d.ts +2 -0
  55. package/dist/typed/odt/write.js +406 -0
  56. package/dist/typed/shared/cascade.d.cts +1 -1
  57. package/dist/typed/shared/cascade.d.ts +1 -1
  58. package/dist/typed/shared/list.cjs +49 -0
  59. package/dist/typed/shared/list.d.cts +2 -2
  60. package/dist/typed/shared/list.d.ts +2 -2
  61. package/dist/typed/shared/list.js +48 -1
  62. package/dist/typed/shared/metadata.cjs +41 -0
  63. package/dist/typed/shared/metadata.d.cts +2 -2
  64. package/dist/typed/shared/metadata.d.ts +2 -2
  65. package/dist/typed/shared/metadata.js +41 -2
  66. package/dist/typed/shared/paragraph.cjs +118 -2
  67. package/dist/typed/shared/paragraph.d.cts +2 -2
  68. package/dist/typed/shared/paragraph.d.ts +2 -2
  69. package/dist/typed/shared/paragraph.js +117 -5
  70. package/dist/typed/shared/table.cjs +81 -0
  71. package/dist/typed/shared/table.d.cts +2 -2
  72. package/dist/typed/shared/table.d.ts +2 -2
  73. package/dist/typed/shared/table.js +84 -4
  74. package/dist/typed/shared/text.cjs +60 -0
  75. package/dist/typed/shared/text.d.cts +2 -2
  76. package/dist/typed/shared/text.d.ts +2 -2
  77. package/dist/typed/shared/text.js +60 -2
  78. package/dist/write-7Uu_wlkL.d.cts +13 -0
  79. package/dist/write-DGcI9W7Z.d.ts +13 -0
  80. package/package.json +2 -2
  81. package/dist/metadata-01SgHkRR.d.cts +0 -7
  82. package/dist/metadata-D1SOBTh8.d.ts +0 -7
  83. package/dist/paragraph-ByTzS8Li.d.ts +0 -18
  84. package/dist/paragraph-CVULactG.d.cts +0 -18
  85. package/dist/text-Bn3C7lnm.d.ts +0 -10
  86. package/dist/text-CDUCcwje.d.cts +0 -10
@@ -1,4 +1,5 @@
1
- import { decodeXmlText } from "../../xml/entities.js";
1
+ import { el, txt } from "../../xml/fragment.js";
2
+ import { decodeXmlText, encodeXmlText } from "../../xml/entities.js";
2
3
  import { attrValue } from "../../xml/query.js";
3
4
  //#region src/typed/shared/text.ts
4
5
  const ODF_FIELD_TAGS = /* @__PURE__ */ new Set([
@@ -91,5 +92,62 @@ function decodeOdfText(container) {
91
92
  for (const child of container.children) text += decodeOdfNode(child);
92
93
  return text;
93
94
  }
95
+ const SPACE = " ";
96
+ const TAB = " ";
97
+ const LINE_BREAK = "\n";
98
+ function segmentOdfText(text, protectLeading, protectTrailing) {
99
+ const segments = [];
100
+ let plain = "";
101
+ const flushPlain = () => {
102
+ if (plain.length > 0) {
103
+ segments.push({
104
+ kind: "text",
105
+ text: plain
106
+ });
107
+ plain = "";
108
+ }
109
+ };
110
+ let index = 0;
111
+ while (index < text.length) {
112
+ const character = text[index];
113
+ if (character === TAB || character === LINE_BREAK) {
114
+ flushPlain();
115
+ segments.push({
116
+ kind: character === TAB ? "tab" : "lineBreak",
117
+ text: character
118
+ });
119
+ index += 1;
120
+ continue;
121
+ }
122
+ if (character !== SPACE) {
123
+ plain += character;
124
+ index += 1;
125
+ continue;
126
+ }
127
+ let end = index;
128
+ while (end < text.length && text[end] === SPACE) end += 1;
129
+ const spaces = text.slice(index, end);
130
+ if (spaces.length > 1 || index === 0 && protectLeading || end === text.length && protectTrailing) {
131
+ flushPlain();
132
+ segments.push({
133
+ kind: "space",
134
+ text: spaces
135
+ });
136
+ } else plain += spaces;
137
+ index = end;
138
+ }
139
+ flushPlain();
140
+ return segments;
141
+ }
142
+ function buildOdfInlineNodes(segments) {
143
+ return segments.map((segment) => {
144
+ switch (segment.kind) {
145
+ case "text": return txt(encodeXmlText(segment.text));
146
+ case "space": return segment.text.length === 1 ? el("text:s") : el("text:s", { "text:c": String(segment.text.length) });
147
+ case "tab": return el("text:tab");
148
+ case "lineBreak": return el("text:line-break");
149
+ }
150
+ });
151
+ }
94
152
  //#endregion
95
- export { ODF_FIELD_TAGS, decodeOdfText, getOdfSpaceCount, isOdfFieldElement, measureOdfNodeLength, sumOdfNodeLength };
153
+ export { ODF_FIELD_TAGS, buildOdfInlineNodes, decodeOdfText, getOdfSpaceCount, isOdfFieldElement, measureOdfNodeLength, segmentOdfText, sumOdfNodeLength };
@@ -0,0 +1,13 @@
1
+ import { r as Package } from "./package-DMk9fuTI.cjs";
2
+ import { ContentDocument, DocumentTree } from "document-schema.js";
3
+ //#region src/typed/odt/write.d.ts
4
+ interface OdtWriteOptions {
5
+ readonly version?: string;
6
+ }
7
+ declare function normaliseOdtContent(document: ContentDocument): Extract<ContentDocument, {
8
+ kind: "wordprocessing";
9
+ }>;
10
+ declare function writeOdtContent(document: ContentDocument, options?: OdtWriteOptions): Package;
11
+ declare function writeOdt(document: DocumentTree, options?: OdtWriteOptions): Package;
12
+ //#endregion
13
+ export { writeOdtContent as i, normaliseOdtContent as n, writeOdt as r, OdtWriteOptions as t };
@@ -0,0 +1,13 @@
1
+ import { r as Package } from "./package-otZYrxiO.js";
2
+ import { ContentDocument, DocumentTree } from "document-schema.js";
3
+ //#region src/typed/odt/write.d.ts
4
+ interface OdtWriteOptions {
5
+ readonly version?: string;
6
+ }
7
+ declare function normaliseOdtContent(document: ContentDocument): Extract<ContentDocument, {
8
+ kind: "wordprocessing";
9
+ }>;
10
+ declare function writeOdtContent(document: ContentDocument, options?: OdtWriteOptions): Package;
11
+ declare function writeOdt(document: DocumentTree, options?: OdtWriteOptions): Package;
12
+ //#endregion
13
+ export { writeOdtContent as i, normaliseOdtContent as n, writeOdt as r, OdtWriteOptions as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "odf.js",
3
- "version": "6.2.0",
3
+ "version": "6.3.0",
4
4
  "description": "Type-safe, lossless round-trip conversion between OpenDocument Format packages (odt, ods, odp) and JSON, plus read support for the pre-OASIS OpenOffice.org 1.x documents ODF was based on (sxw, sxc, sxi, sxd), hand-written and dependency-minimal, built on Zod 4 codecs.",
5
5
  "type": "module",
6
6
  "repository": {
@@ -85,7 +85,7 @@
85
85
  "license": "MIT",
86
86
  "packageManager": "pnpm@11.6.0",
87
87
  "dependencies": {
88
- "document-schema.js": "^5.4.0",
88
+ "document-schema.js": "^5.5.0",
89
89
  "fast-xml-parser": "^5.10.1",
90
90
  "fflate": "^0.8.3",
91
91
  "zod": "^4.4.3"
@@ -1,7 +0,0 @@
1
- import { r as Package } from "./package-DMk9fuTI.cjs";
2
- import { LayoutMetadata } from "document-schema.js";
3
- //#region src/typed/shared/metadata.d.ts
4
- declare const META_PART = "meta.xml";
5
- declare function readOdfMetadata(pkg: Package): LayoutMetadata;
6
- //#endregion
7
- export { readOdfMetadata as n, META_PART as t };
@@ -1,7 +0,0 @@
1
- import { r as Package } from "./package-otZYrxiO.js";
2
- import { LayoutMetadata } from "document-schema.js";
3
- //#region src/typed/shared/metadata.d.ts
4
- declare const META_PART = "meta.xml";
5
- declare function readOdfMetadata(pkg: Package): LayoutMetadata;
6
- //#endregion
7
- export { readOdfMetadata as n, META_PART as t };
@@ -1,18 +0,0 @@
1
- import { l as XmlElement } from "./node-B6JX5CRX.js";
2
- import { r as Package } from "./package-otZYrxiO.js";
3
- import { t as OdfListIdState } from "./list-X_GJY7P3.js";
4
- import { a as OdfDefinitionsSink, l as OdfResidueFormat, s as OdfMarkerHalf } from "./constructs-BntJjuvH.js";
5
- import { ContentBlock, ContentParagraph, ProvenanceDescriptor } from "document-schema.js";
6
- //#region src/typed/shared/paragraph.d.ts
7
- interface OdfParagraphContext {
8
- readonly provenanceRegions?: ReadonlyMap<string, ProvenanceDescriptor>;
9
- readonly markersOut?: OdfMarkerHalf[];
10
- readonly definitions?: OdfDefinitionsSink;
11
- readonly listIdState?: OdfListIdState;
12
- readonly format?: OdfResidueFormat;
13
- }
14
- declare function readOdfConstructBodyBlocks(body: XmlElement, pkg: Package, context: OdfParagraphContext, listIdState: OdfListIdState): ContentBlock[];
15
- declare function readOdfParagraph(pElement: XmlElement, pkg: Package, context?: OdfParagraphContext): ContentParagraph;
16
- declare function readParagraphOrHeading(element: XmlElement, paragraph: ContentParagraph): ContentParagraph;
17
- //#endregion
18
- export { readParagraphOrHeading as i, readOdfConstructBodyBlocks as n, readOdfParagraph as r, OdfParagraphContext as t };
@@ -1,18 +0,0 @@
1
- import { l as XmlElement } from "./node-B6JX5CRX.cjs";
2
- import { r as Package } from "./package-DMk9fuTI.cjs";
3
- import { t as OdfListIdState } from "./list-DwTyo_B2.cjs";
4
- import { a as OdfDefinitionsSink, l as OdfResidueFormat, s as OdfMarkerHalf } from "./constructs-BzLZy5YP.cjs";
5
- import { ContentBlock, ContentParagraph, ProvenanceDescriptor } from "document-schema.js";
6
- //#region src/typed/shared/paragraph.d.ts
7
- interface OdfParagraphContext {
8
- readonly provenanceRegions?: ReadonlyMap<string, ProvenanceDescriptor>;
9
- readonly markersOut?: OdfMarkerHalf[];
10
- readonly definitions?: OdfDefinitionsSink;
11
- readonly listIdState?: OdfListIdState;
12
- readonly format?: OdfResidueFormat;
13
- }
14
- declare function readOdfConstructBodyBlocks(body: XmlElement, pkg: Package, context: OdfParagraphContext, listIdState: OdfListIdState): ContentBlock[];
15
- declare function readOdfParagraph(pElement: XmlElement, pkg: Package, context?: OdfParagraphContext): ContentParagraph;
16
- declare function readParagraphOrHeading(element: XmlElement, paragraph: ContentParagraph): ContentParagraph;
17
- //#endregion
18
- export { readParagraphOrHeading as i, readOdfConstructBodyBlocks as n, readOdfParagraph as r, OdfParagraphContext as t };
@@ -1,10 +0,0 @@
1
- import { d as XmlNode, l as XmlElement } from "./node-B6JX5CRX.js";
2
- //#region src/typed/shared/text.d.ts
3
- declare const ODF_FIELD_TAGS: ReadonlySet<string>;
4
- declare function isOdfFieldElement(element: XmlElement): boolean;
5
- declare function getOdfSpaceCount(element: XmlElement): number;
6
- declare function measureOdfNodeLength(node: XmlNode): number;
7
- declare function sumOdfNodeLength(nodes: readonly XmlNode[]): number;
8
- declare function decodeOdfText(container: XmlElement): string;
9
- //#endregion
10
- export { measureOdfNodeLength as a, isOdfFieldElement as i, decodeOdfText as n, sumOdfNodeLength as o, getOdfSpaceCount as r, ODF_FIELD_TAGS as t };
@@ -1,10 +0,0 @@
1
- import { d as XmlNode, l as XmlElement } from "./node-B6JX5CRX.cjs";
2
- //#region src/typed/shared/text.d.ts
3
- declare const ODF_FIELD_TAGS: ReadonlySet<string>;
4
- declare function isOdfFieldElement(element: XmlElement): boolean;
5
- declare function getOdfSpaceCount(element: XmlElement): number;
6
- declare function measureOdfNodeLength(node: XmlNode): number;
7
- declare function sumOdfNodeLength(nodes: readonly XmlNode[]): number;
8
- declare function decodeOdfText(container: XmlElement): string;
9
- //#endregion
10
- export { measureOdfNodeLength as a, isOdfFieldElement as i, decodeOdfText as n, sumOdfNodeLength as o, getOdfSpaceCount as r, ODF_FIELD_TAGS as t };