@usejunior/docx-core 0.9.1 → 0.11.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.
- package/LICENSE +202 -21
- package/NOTICE +2 -0
- package/README.md +2 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/atomizer.d.ts +28 -8
- package/dist/atomizer.d.ts.map +1 -1
- package/dist/atomizer.js +96 -25
- package/dist/atomizer.js.map +1 -1
- package/dist/baselines/atomizer/auxiliaryIdCollision.d.ts +99 -0
- package/dist/baselines/atomizer/auxiliaryIdCollision.d.ts.map +1 -0
- package/dist/baselines/atomizer/auxiliaryIdCollision.js +415 -0
- package/dist/baselines/atomizer/auxiliaryIdCollision.js.map +1 -0
- package/dist/baselines/atomizer/documentReconstructor.d.ts.map +1 -1
- package/dist/baselines/atomizer/documentReconstructor.js +333 -112
- package/dist/baselines/atomizer/documentReconstructor.js.map +1 -1
- package/dist/baselines/atomizer/formattingFidelity.d.ts +99 -0
- package/dist/baselines/atomizer/formattingFidelity.d.ts.map +1 -0
- package/dist/baselines/atomizer/formattingFidelity.js +449 -0
- package/dist/baselines/atomizer/formattingFidelity.js.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier-bookmarks.d.ts +37 -0
- package/dist/baselines/atomizer/inPlaceModifier-bookmarks.d.ts.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier-bookmarks.js +189 -0
- package/dist/baselines/atomizer/inPlaceModifier-bookmarks.js.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier-containers.d.ts +74 -0
- package/dist/baselines/atomizer/inPlaceModifier-containers.d.ts.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier-containers.js +171 -0
- package/dist/baselines/atomizer/inPlaceModifier-containers.js.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier-deletion.d.ts +88 -0
- package/dist/baselines/atomizer/inPlaceModifier-deletion.d.ts.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier-deletion.js +326 -0
- package/dist/baselines/atomizer/inPlaceModifier-deletion.js.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier-postprocess.d.ts +85 -0
- package/dist/baselines/atomizer/inPlaceModifier-postprocess.d.ts.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier-postprocess.js +402 -0
- package/dist/baselines/atomizer/inPlaceModifier-postprocess.js.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier-presplit.d.ts +39 -0
- package/dist/baselines/atomizer/inPlaceModifier-presplit.d.ts.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier-presplit.js +265 -0
- package/dist/baselines/atomizer/inPlaceModifier-presplit.js.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier-shared.d.ts +62 -0
- package/dist/baselines/atomizer/inPlaceModifier-shared.d.ts.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier-shared.js +139 -0
- package/dist/baselines/atomizer/inPlaceModifier-shared.js.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier-wrappers.d.ts +198 -0
- package/dist/baselines/atomizer/inPlaceModifier-wrappers.d.ts.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier-wrappers.js +475 -0
- package/dist/baselines/atomizer/inPlaceModifier-wrappers.js.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier.d.ts +6 -290
- package/dist/baselines/atomizer/inPlaceModifier.d.ts.map +1 -1
- package/dist/baselines/atomizer/inPlaceModifier.js +23 -1828
- package/dist/baselines/atomizer/inPlaceModifier.js.map +1 -1
- package/dist/baselines/atomizer/pipeline.d.ts +36 -2
- package/dist/baselines/atomizer/pipeline.d.ts.map +1 -1
- package/dist/baselines/atomizer/pipeline.js +216 -144
- package/dist/baselines/atomizer/pipeline.js.map +1 -1
- package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts.map +1 -1
- package/dist/baselines/atomizer/trackChangesAcceptorAst.js +199 -173
- package/dist/baselines/atomizer/trackChangesAcceptorAst.js.map +1 -1
- package/dist/baselines/wmlcomparer/DotnetCli.d.ts.map +1 -1
- package/dist/baselines/wmlcomparer/DotnetCli.js +7 -0
- package/dist/baselines/wmlcomparer/DotnetCli.js.map +1 -1
- package/dist/cli/compare-two.d.ts.map +1 -1
- package/dist/cli/compare-two.js +3 -1
- package/dist/cli/compare-two.js.map +1 -1
- package/dist/cli/conformance-adapter.d.ts +3 -0
- package/dist/cli/conformance-adapter.d.ts.map +1 -0
- package/dist/cli/conformance-adapter.js +93 -0
- package/dist/cli/conformance-adapter.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +5 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/compare-types.d.ts +197 -0
- package/dist/compare-types.d.ts.map +1 -0
- package/dist/compare-types.js +2 -0
- package/dist/compare-types.js.map +1 -0
- package/dist/core-types.d.ts +5 -1
- package/dist/core-types.d.ts.map +1 -1
- package/dist/core-types.js +5 -1
- package/dist/core-types.js.map +1 -1
- package/dist/footnotes.d.ts +8 -3
- package/dist/footnotes.d.ts.map +1 -1
- package/dist/footnotes.js +8 -3
- package/dist/footnotes.js.map +1 -1
- package/dist/generation/compile.d.ts +21 -0
- package/dist/generation/compile.d.ts.map +1 -0
- package/dist/generation/compile.js +46 -0
- package/dist/generation/compile.js.map +1 -0
- package/dist/generation/context.d.ts +42 -0
- package/dist/generation/context.d.ts.map +1 -0
- package/dist/generation/context.js +65 -0
- package/dist/generation/context.js.map +1 -0
- package/dist/generation/emit/comments-part.d.ts +36 -0
- package/dist/generation/emit/comments-part.d.ts.map +1 -0
- package/dist/generation/emit/comments-part.js +116 -0
- package/dist/generation/emit/comments-part.js.map +1 -0
- package/dist/generation/emit/document-part.d.ts +24 -0
- package/dist/generation/emit/document-part.d.ts.map +1 -0
- package/dist/generation/emit/document-part.js +60 -0
- package/dist/generation/emit/document-part.js.map +1 -0
- package/dist/generation/emit/emit-context.d.ts +26 -0
- package/dist/generation/emit/emit-context.d.ts.map +1 -0
- package/dist/generation/emit/emit-context.js +19 -0
- package/dist/generation/emit/emit-context.js.map +1 -0
- package/dist/generation/emit/header-footer-part.d.ts +23 -0
- package/dist/generation/emit/header-footer-part.d.ts.map +1 -0
- package/dist/generation/emit/header-footer-part.js +57 -0
- package/dist/generation/emit/header-footer-part.js.map +1 -0
- package/dist/generation/emit/numbering-part.d.ts +29 -0
- package/dist/generation/emit/numbering-part.d.ts.map +1 -0
- package/dist/generation/emit/numbering-part.js +100 -0
- package/dist/generation/emit/numbering-part.js.map +1 -0
- package/dist/generation/emit/package-parts.d.ts +24 -0
- package/dist/generation/emit/package-parts.d.ts.map +1 -0
- package/dist/generation/emit/package-parts.js +121 -0
- package/dist/generation/emit/package-parts.js.map +1 -0
- package/dist/generation/emit/paragraph.d.ts +24 -0
- package/dist/generation/emit/paragraph.d.ts.map +1 -0
- package/dist/generation/emit/paragraph.js +63 -0
- package/dist/generation/emit/paragraph.js.map +1 -0
- package/dist/generation/emit/properties.d.ts +34 -0
- package/dist/generation/emit/properties.d.ts.map +1 -0
- package/dist/generation/emit/properties.js +138 -0
- package/dist/generation/emit/properties.js.map +1 -0
- package/dist/generation/emit/run.d.ts +15 -0
- package/dist/generation/emit/run.d.ts.map +1 -0
- package/dist/generation/emit/run.js +71 -0
- package/dist/generation/emit/run.js.map +1 -0
- package/dist/generation/emit/section.d.ts +29 -0
- package/dist/generation/emit/section.d.ts.map +1 -0
- package/dist/generation/emit/section.js +117 -0
- package/dist/generation/emit/section.js.map +1 -0
- package/dist/generation/emit/settings-part.d.ts +13 -0
- package/dist/generation/emit/settings-part.d.ts.map +1 -0
- package/dist/generation/emit/settings-part.js +24 -0
- package/dist/generation/emit/settings-part.js.map +1 -0
- package/dist/generation/emit/styles-part.d.ts +16 -0
- package/dist/generation/emit/styles-part.d.ts.map +1 -0
- package/dist/generation/emit/styles-part.js +80 -0
- package/dist/generation/emit/styles-part.js.map +1 -0
- package/dist/generation/emit/table.d.ts +26 -0
- package/dist/generation/emit/table.d.ts.map +1 -0
- package/dist/generation/emit/table.js +196 -0
- package/dist/generation/emit/table.js.map +1 -0
- package/dist/generation/errors.d.ts +22 -0
- package/dist/generation/errors.d.ts.map +1 -0
- package/dist/generation/errors.js +29 -0
- package/dist/generation/errors.js.map +1 -0
- package/dist/generation/index.d.ts +13 -0
- package/dist/generation/index.d.ts.map +1 -0
- package/dist/generation/index.js +12 -0
- package/dist/generation/index.js.map +1 -0
- package/dist/generation/ordering.d.ts +46 -0
- package/dist/generation/ordering.d.ts.map +1 -0
- package/dist/generation/ordering.js +119 -0
- package/dist/generation/ordering.js.map +1 -0
- package/dist/generation/recipes.d.ts +47 -0
- package/dist/generation/recipes.d.ts.map +1 -0
- package/dist/generation/recipes.js +84 -0
- package/dist/generation/recipes.js.map +1 -0
- package/dist/generation/structural-checks.d.ts +24 -0
- package/dist/generation/structural-checks.d.ts.map +1 -0
- package/dist/generation/structural-checks.js +318 -0
- package/dist/generation/structural-checks.js.map +1 -0
- package/dist/generation/types.d.ts +217 -0
- package/dist/generation/types.d.ts.map +1 -0
- package/dist/generation/types.js +16 -0
- package/dist/generation/types.js.map +1 -0
- package/dist/generation/validate-spec.d.ts +27 -0
- package/dist/generation/validate-spec.d.ts.map +1 -0
- package/dist/generation/validate-spec.js +307 -0
- package/dist/generation/validate-spec.js.map +1 -0
- package/dist/index.d.ts +9 -150
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -1
- package/dist/integration/generation-probes.d.ts +15 -0
- package/dist/integration/generation-probes.d.ts.map +1 -0
- package/dist/integration/generation-probes.js +84 -0
- package/dist/integration/generation-probes.js.map +1 -0
- package/dist/integration/libreoffice-oracle.d.ts +49 -0
- package/dist/integration/libreoffice-oracle.d.ts.map +1 -0
- package/dist/integration/libreoffice-oracle.js +290 -0
- package/dist/integration/libreoffice-oracle.js.map +1 -0
- package/dist/integration/synthetic-docx-fixture.d.ts +72 -0
- package/dist/integration/synthetic-docx-fixture.d.ts.map +1 -1
- package/dist/integration/synthetic-docx-fixture.js +131 -4
- package/dist/integration/synthetic-docx-fixture.js.map +1 -1
- package/dist/primitives/accept_changes.d.ts +4 -3
- package/dist/primitives/accept_changes.d.ts.map +1 -1
- package/dist/primitives/accept_changes.js +163 -77
- package/dist/primitives/accept_changes.js.map +1 -1
- package/dist/primitives/comments.d.ts +12 -3
- package/dist/primitives/comments.d.ts.map +1 -1
- package/dist/primitives/comments.js +374 -97
- package/dist/primitives/comments.js.map +1 -1
- package/dist/primitives/content_fingerprint.d.ts +29 -0
- package/dist/primitives/content_fingerprint.d.ts.map +1 -0
- package/dist/primitives/content_fingerprint.js +63 -0
- package/dist/primitives/content_fingerprint.js.map +1 -0
- package/dist/primitives/document.d.ts +94 -15
- package/dist/primitives/document.d.ts.map +1 -1
- package/dist/primitives/document.js +373 -36
- package/dist/primitives/document.js.map +1 -1
- package/dist/primitives/document_view-comments.d.ts +18 -0
- package/dist/primitives/document_view-comments.d.ts.map +1 -0
- package/dist/primitives/document_view-comments.js +160 -0
- package/dist/primitives/document_view-comments.js.map +1 -0
- package/dist/primitives/document_view-headings.d.ts +45 -0
- package/dist/primitives/document_view-headings.d.ts.map +1 -0
- package/dist/primitives/document_view-headings.js +247 -0
- package/dist/primitives/document_view-headings.js.map +1 -0
- package/dist/primitives/document_view-styles.d.ts +11 -0
- package/dist/primitives/document_view-styles.d.ts.map +1 -0
- package/dist/primitives/document_view-styles.js +104 -0
- package/dist/primitives/document_view-styles.js.map +1 -0
- package/dist/primitives/document_view-toon.d.ts +37 -0
- package/dist/primitives/document_view-toon.d.ts.map +1 -0
- package/dist/primitives/document_view-toon.js +199 -0
- package/dist/primitives/document_view-toon.js.map +1 -0
- package/dist/primitives/document_view-types.d.ts +152 -0
- package/dist/primitives/document_view-types.d.ts.map +1 -0
- package/dist/primitives/document_view-types.js +2 -0
- package/dist/primitives/document_view-types.js.map +1 -0
- package/dist/primitives/document_view.d.ts +8 -106
- package/dist/primitives/document_view.d.ts.map +1 -1
- package/dist/primitives/document_view.js +153 -312
- package/dist/primitives/document_view.js.map +1 -1
- package/dist/primitives/dom-helpers.d.ts +9 -0
- package/dist/primitives/dom-helpers.d.ts.map +1 -1
- package/dist/primitives/dom-helpers.js +10 -1
- package/dist/primitives/dom-helpers.js.map +1 -1
- package/dist/primitives/footnotes.d.ts +4 -3
- package/dist/primitives/footnotes.d.ts.map +1 -1
- package/dist/primitives/footnotes.js +232 -44
- package/dist/primitives/footnotes.js.map +1 -1
- package/dist/primitives/formatting_tags.d.ts +7 -0
- package/dist/primitives/formatting_tags.d.ts.map +1 -1
- package/dist/primitives/formatting_tags.js +22 -11
- package/dist/primitives/formatting_tags.js.map +1 -1
- package/dist/primitives/index.d.ts +10 -0
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/index.js +9 -0
- package/dist/primitives/index.js.map +1 -1
- package/dist/primitives/layout.d.ts +4 -3
- package/dist/primitives/layout.d.ts.map +1 -1
- package/dist/primitives/layout.js +45 -3
- package/dist/primitives/layout.js.map +1 -1
- package/dist/primitives/merge_runs.d.ts +21 -3
- package/dist/primitives/merge_runs.d.ts.map +1 -1
- package/dist/primitives/merge_runs.js +32 -10
- package/dist/primitives/merge_runs.js.map +1 -1
- package/dist/primitives/minimal_save.d.ts +38 -0
- package/dist/primitives/minimal_save.d.ts.map +1 -0
- package/dist/primitives/minimal_save.js +323 -0
- package/dist/primitives/minimal_save.js.map +1 -0
- package/dist/primitives/namespaces.d.ts +47 -0
- package/dist/primitives/namespaces.d.ts.map +1 -1
- package/dist/primitives/namespaces.js +52 -0
- package/dist/primitives/namespaces.js.map +1 -1
- package/dist/primitives/reject_changes.d.ts +6 -4
- package/dist/primitives/reject_changes.d.ts.map +1 -1
- package/dist/primitives/reject_changes.js +187 -91
- package/dist/primitives/reject_changes.js.map +1 -1
- package/dist/primitives/revision-parts.d.ts +7 -0
- package/dist/primitives/revision-parts.d.ts.map +1 -0
- package/dist/primitives/revision-parts.js +27 -0
- package/dist/primitives/revision-parts.js.map +1 -0
- package/dist/primitives/revision-vocabulary.d.ts +7 -0
- package/dist/primitives/revision-vocabulary.d.ts.map +1 -0
- package/dist/primitives/revision-vocabulary.js +39 -0
- package/dist/primitives/revision-vocabulary.js.map +1 -0
- package/dist/primitives/schema-corpus-capture.d.ts +19 -0
- package/dist/primitives/schema-corpus-capture.d.ts.map +1 -0
- package/dist/primitives/schema-corpus-capture.js +29 -0
- package/dist/primitives/schema-corpus-capture.js.map +1 -0
- package/dist/primitives/sectPrAudit.d.ts +19 -0
- package/dist/primitives/sectPrAudit.d.ts.map +1 -0
- package/dist/primitives/sectPrAudit.js +165 -0
- package/dist/primitives/sectPrAudit.js.map +1 -0
- package/dist/primitives/semantic_tags.d.ts +7 -0
- package/dist/primitives/semantic_tags.d.ts.map +1 -1
- package/dist/primitives/semantic_tags.js +23 -4
- package/dist/primitives/semantic_tags.js.map +1 -1
- package/dist/primitives/serialize_html.d.ts +37 -0
- package/dist/primitives/serialize_html.d.ts.map +1 -0
- package/dist/primitives/serialize_html.js +395 -0
- package/dist/primitives/serialize_html.js.map +1 -0
- package/dist/primitives/serialize_markdown.d.ts +16 -0
- package/dist/primitives/serialize_markdown.d.ts.map +1 -0
- package/dist/primitives/serialize_markdown.js +300 -0
- package/dist/primitives/serialize_markdown.js.map +1 -0
- package/dist/primitives/serialize_plaintext.d.ts +15 -0
- package/dist/primitives/serialize_plaintext.d.ts.map +1 -0
- package/dist/primitives/serialize_plaintext.js +154 -0
- package/dist/primitives/serialize_plaintext.js.map +1 -0
- package/dist/primitives/styles.d.ts +15 -0
- package/dist/primitives/styles.d.ts.map +1 -1
- package/dist/primitives/styles.js +33 -22
- package/dist/primitives/styles.js.map +1 -1
- package/dist/primitives/tables.d.ts.map +1 -1
- package/dist/primitives/tables.js +13 -3
- package/dist/primitives/tables.js.map +1 -1
- package/dist/primitives/text.d.ts +2 -1
- package/dist/primitives/text.d.ts.map +1 -1
- package/dist/primitives/text.js +116 -12
- package/dist/primitives/text.js.map +1 -1
- package/dist/primitives/track-changes-emitter.d.ts +148 -0
- package/dist/primitives/track-changes-emitter.d.ts.map +1 -0
- package/dist/primitives/track-changes-emitter.js +291 -0
- package/dist/primitives/track-changes-emitter.js.map +1 -0
- package/dist/primitives/validate_ai_revisions.d.ts +35 -0
- package/dist/primitives/validate_ai_revisions.d.ts.map +1 -0
- package/dist/primitives/validate_ai_revisions.js +323 -0
- package/dist/primitives/validate_ai_revisions.js.map +1 -0
- package/dist/primitives/xml-helpers.d.ts +29 -0
- package/dist/primitives/xml-helpers.d.ts.map +1 -0
- package/dist/primitives/xml-helpers.js +35 -0
- package/dist/primitives/xml-helpers.js.map +1 -0
- package/dist/primitives/xml.d.ts +5 -0
- package/dist/primitives/xml.d.ts.map +1 -1
- package/dist/primitives/xml.js +5 -0
- package/dist/primitives/xml.js.map +1 -1
- package/dist/primitives/zip.d.ts +1 -0
- package/dist/primitives/zip.d.ts.map +1 -1
- package/dist/primitives/zip.js +21 -3
- package/dist/primitives/zip.js.map +1 -1
- package/dist/shared/field-structure.d.ts +14 -0
- package/dist/shared/field-structure.d.ts.map +1 -0
- package/dist/shared/field-structure.js +166 -0
- package/dist/shared/field-structure.js.map +1 -0
- package/dist/shared/ooxml/namespaces.d.ts +4 -1
- package/dist/shared/ooxml/namespaces.d.ts.map +1 -1
- package/dist/shared/ooxml/namespaces.js +4 -1
- package/dist/shared/ooxml/namespaces.js.map +1 -1
- package/package.json +13 -9
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared property builders: RunProps → w:rPr and paragraph formatting → w:pPr
|
|
3
|
+
* child maps, used by both the body emitters (run.ts / paragraph.ts) and the
|
|
4
|
+
* styles-part emitter so direct formatting and style definitions can never
|
|
5
|
+
* drift apart. All children are routed through the ordering tables.
|
|
6
|
+
*/
|
|
7
|
+
import { createWmlElement } from '../../primitives/dom-helpers.js';
|
|
8
|
+
import { W } from '../../primitives/namespaces.js';
|
|
9
|
+
import { appendInOrder, PPR_ORDER, RPR_ORDER } from '../ordering.js';
|
|
10
|
+
const ALIGNMENT_TO_JC = {
|
|
11
|
+
left: 'left',
|
|
12
|
+
center: 'center',
|
|
13
|
+
right: 'right',
|
|
14
|
+
justify: 'both',
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Build the ordered rPr children for a RunProps value. Returns null when no
|
|
18
|
+
* property is set so callers can omit the rPr container entirely.
|
|
19
|
+
*
|
|
20
|
+
* Complex-script twins (bCs/iCs/szCs) and the full rFonts script coverage
|
|
21
|
+
* (ascii + hAnsi + cs) are always emitted alongside their base properties so
|
|
22
|
+
* all script ranges agree.
|
|
23
|
+
*
|
|
24
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.3.2.28
|
|
25
|
+
*/
|
|
26
|
+
export function buildRunPropsElement(doc, props) {
|
|
27
|
+
const children = new Map();
|
|
28
|
+
if (props.font !== undefined) {
|
|
29
|
+
children.set(W.rFonts, createWmlElement(doc, W.rFonts, {
|
|
30
|
+
'w:ascii': props.font,
|
|
31
|
+
'w:hAnsi': props.font,
|
|
32
|
+
'w:cs': props.font,
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
if (props.bold !== undefined) {
|
|
36
|
+
children.set(W.b, createWmlElement(doc, W.b, props.bold ? undefined : { 'w:val': '0' }));
|
|
37
|
+
children.set(W.bCs, createWmlElement(doc, W.bCs, props.bold ? undefined : { 'w:val': '0' }));
|
|
38
|
+
}
|
|
39
|
+
if (props.italic !== undefined) {
|
|
40
|
+
children.set(W.i, createWmlElement(doc, W.i, props.italic ? undefined : { 'w:val': '0' }));
|
|
41
|
+
children.set(W.iCs, createWmlElement(doc, W.iCs, props.italic ? undefined : { 'w:val': '0' }));
|
|
42
|
+
}
|
|
43
|
+
if (props.caps !== undefined) {
|
|
44
|
+
children.set(W.caps, createWmlElement(doc, W.caps, props.caps ? undefined : { 'w:val': '0' }));
|
|
45
|
+
}
|
|
46
|
+
if (props.smallCaps !== undefined) {
|
|
47
|
+
children.set(W.smallCaps, createWmlElement(doc, W.smallCaps, props.smallCaps ? undefined : { 'w:val': '0' }));
|
|
48
|
+
}
|
|
49
|
+
if (props.colorHex !== undefined) {
|
|
50
|
+
children.set(W.color, createWmlElement(doc, W.color, { 'w:val': props.colorHex }));
|
|
51
|
+
}
|
|
52
|
+
if (props.sizePt !== undefined) {
|
|
53
|
+
const halfPoints = String(Math.round(props.sizePt * 2));
|
|
54
|
+
children.set(W.sz, createWmlElement(doc, W.sz, { 'w:val': halfPoints }));
|
|
55
|
+
children.set(W.szCs, createWmlElement(doc, W.szCs, { 'w:val': halfPoints }));
|
|
56
|
+
}
|
|
57
|
+
if (props.underline !== undefined) {
|
|
58
|
+
children.set(W.u, createWmlElement(doc, W.u, { 'w:val': props.underline }));
|
|
59
|
+
}
|
|
60
|
+
if (children.size === 0)
|
|
61
|
+
return null;
|
|
62
|
+
const rPr = createWmlElement(doc, W.rPr);
|
|
63
|
+
appendInOrder(rPr, children, RPR_ORDER);
|
|
64
|
+
return rPr;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Build the ordered pPr children for a paragraph-formatting subset. Returns
|
|
68
|
+
* null when nothing is set. The optional extras hook lets phase-specific
|
|
69
|
+
* callers add already-built children (e.g. a section break sectPr) that
|
|
70
|
+
* still go through the same ordering discipline.
|
|
71
|
+
*
|
|
72
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.3.1.26
|
|
73
|
+
*/
|
|
74
|
+
export function buildParagraphPropsElement(doc, props, extras) {
|
|
75
|
+
const children = new Map();
|
|
76
|
+
if (props.styleId !== undefined) {
|
|
77
|
+
children.set(W.pStyle, createWmlElement(doc, W.pStyle, { 'w:val': props.styleId }));
|
|
78
|
+
}
|
|
79
|
+
if (props.keepNext) {
|
|
80
|
+
children.set(W.keepNext, createWmlElement(doc, W.keepNext));
|
|
81
|
+
}
|
|
82
|
+
if (props.pageBreakBefore) {
|
|
83
|
+
children.set(W.pageBreakBefore, createWmlElement(doc, W.pageBreakBefore));
|
|
84
|
+
}
|
|
85
|
+
if (props.tabs && props.tabs.length > 0) {
|
|
86
|
+
const tabs = createWmlElement(doc, W.tabs);
|
|
87
|
+
for (const stop of props.tabs) {
|
|
88
|
+
const attrs = { 'w:val': stop.align, 'w:pos': String(stop.posTwips) };
|
|
89
|
+
if (stop.leader && stop.leader !== 'none')
|
|
90
|
+
attrs['w:leader'] = stop.leader;
|
|
91
|
+
tabs.appendChild(createWmlElement(doc, W.tab, attrs));
|
|
92
|
+
}
|
|
93
|
+
children.set(W.tabs, tabs);
|
|
94
|
+
}
|
|
95
|
+
if (props.spacing) {
|
|
96
|
+
const attrs = {};
|
|
97
|
+
if (props.spacing.beforeTwips !== undefined)
|
|
98
|
+
attrs['w:before'] = String(props.spacing.beforeTwips);
|
|
99
|
+
if (props.spacing.afterTwips !== undefined)
|
|
100
|
+
attrs['w:after'] = String(props.spacing.afterTwips);
|
|
101
|
+
if (props.spacing.lineTwips !== undefined) {
|
|
102
|
+
attrs['w:line'] = String(props.spacing.lineTwips);
|
|
103
|
+
attrs['w:lineRule'] = props.spacing.lineRule ?? 'auto';
|
|
104
|
+
}
|
|
105
|
+
if (Object.keys(attrs).length > 0)
|
|
106
|
+
children.set(W.spacing, createWmlElement(doc, W.spacing, attrs));
|
|
107
|
+
}
|
|
108
|
+
if (props.indent) {
|
|
109
|
+
const attrs = {};
|
|
110
|
+
if (props.indent.leftTwips !== undefined)
|
|
111
|
+
attrs['w:left'] = String(props.indent.leftTwips);
|
|
112
|
+
if (props.indent.rightTwips !== undefined)
|
|
113
|
+
attrs['w:right'] = String(props.indent.rightTwips);
|
|
114
|
+
if (props.indent.firstLineTwips !== undefined)
|
|
115
|
+
attrs['w:firstLine'] = String(props.indent.firstLineTwips);
|
|
116
|
+
if (props.indent.hangingTwips !== undefined)
|
|
117
|
+
attrs['w:hanging'] = String(props.indent.hangingTwips);
|
|
118
|
+
if (Object.keys(attrs).length > 0)
|
|
119
|
+
children.set(W.ind, createWmlElement(doc, W.ind, attrs));
|
|
120
|
+
}
|
|
121
|
+
if (props.alignment !== undefined) {
|
|
122
|
+
children.set(W.jc, createWmlElement(doc, W.jc, { 'w:val': ALIGNMENT_TO_JC[props.alignment] }));
|
|
123
|
+
}
|
|
124
|
+
if (extras) {
|
|
125
|
+
for (const [name, value] of extras)
|
|
126
|
+
children.set(name, value);
|
|
127
|
+
}
|
|
128
|
+
if (children.size === 0)
|
|
129
|
+
return null;
|
|
130
|
+
const pPr = createWmlElement(doc, W.pPr);
|
|
131
|
+
appendInOrder(pPr, children, PPR_ORDER);
|
|
132
|
+
return pPr;
|
|
133
|
+
}
|
|
134
|
+
/** Paragraph-formatting subset of a StyleSpec, normalized for the builder. */
|
|
135
|
+
export function styleParagraphProps(style) {
|
|
136
|
+
return { ...style.paragraph };
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=properties.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"properties.js","sourceRoot":"","sources":["../../../src/generation/emit/properties.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inline-run emitter.
|
|
3
|
+
*
|
|
4
|
+
* Shipped: text runs with full RunProps formatting, tab and break runs, and
|
|
5
|
+
* complete five-part complex fields. A FieldSpec compiles to
|
|
6
|
+
* begin → instruction text → separate → cached result → end so reading
|
|
7
|
+
* applications always display a value without recomputation prompts — the
|
|
8
|
+
* required `cachedResult` makes the no-recovery-dialog property
|
|
9
|
+
* unrepresentable-by-omission. `w:dirty` is never set (it triggers
|
|
10
|
+
* update-fields prompts in some readers).
|
|
11
|
+
*/
|
|
12
|
+
import type { InlineSpec } from '../types.js';
|
|
13
|
+
/** Build the w:r element(s) for one inline spec node. */
|
|
14
|
+
export declare function buildInlineRuns(doc: Document, inline: InlineSpec): Element[];
|
|
15
|
+
//# sourceMappingURL=run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/generation/emit/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAa,UAAU,EAAY,MAAM,aAAa,CAAC;AAqCnE,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,EAAE,CAsB5E"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inline-run emitter.
|
|
3
|
+
*
|
|
4
|
+
* Shipped: text runs with full RunProps formatting, tab and break runs, and
|
|
5
|
+
* complete five-part complex fields. A FieldSpec compiles to
|
|
6
|
+
* begin → instruction text → separate → cached result → end so reading
|
|
7
|
+
* applications always display a value without recomputation prompts — the
|
|
8
|
+
* required `cachedResult` makes the no-recovery-dialog property
|
|
9
|
+
* unrepresentable-by-omission. `w:dirty` is never set (it triggers
|
|
10
|
+
* update-fields prompts in some readers).
|
|
11
|
+
*/
|
|
12
|
+
import { createWmlElement, createWmlTextElement } from '../../primitives/dom-helpers.js';
|
|
13
|
+
import { W } from '../../primitives/namespaces.js';
|
|
14
|
+
import { GenerationInternalError } from '../errors.js';
|
|
15
|
+
import { buildRunPropsElement } from './properties.js';
|
|
16
|
+
/** Instruction text per field, with the canonical surrounding spaces. */
|
|
17
|
+
const FIELD_INSTRUCTION_TEXT = {
|
|
18
|
+
PAGE: ' PAGE ',
|
|
19
|
+
NUMPAGES: ' NUMPAGES ',
|
|
20
|
+
};
|
|
21
|
+
function makeRun(doc, props, ...children) {
|
|
22
|
+
const run = createWmlElement(doc, W.r);
|
|
23
|
+
const rPr = buildRunPropsElement(doc, props);
|
|
24
|
+
if (rPr)
|
|
25
|
+
run.appendChild(rPr);
|
|
26
|
+
for (const child of children)
|
|
27
|
+
run.appendChild(child);
|
|
28
|
+
return run;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Five sibling runs per field: fldChar begin, preserved-space instruction
|
|
32
|
+
* text, fldChar separate, the cached result, fldChar end.
|
|
33
|
+
*
|
|
34
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.16.18
|
|
35
|
+
*/
|
|
36
|
+
function buildFieldRuns(doc, field) {
|
|
37
|
+
const instr = createWmlElement(doc, W.instrText);
|
|
38
|
+
instr.setAttribute('xml:space', 'preserve');
|
|
39
|
+
instr.appendChild(doc.createTextNode(FIELD_INSTRUCTION_TEXT[field.field]));
|
|
40
|
+
return [
|
|
41
|
+
makeRun(doc, field, createWmlElement(doc, W.fldChar, { 'w:fldCharType': 'begin' })),
|
|
42
|
+
makeRun(doc, field, instr),
|
|
43
|
+
makeRun(doc, field, createWmlElement(doc, W.fldChar, { 'w:fldCharType': 'separate' })),
|
|
44
|
+
makeRun(doc, field, createWmlTextElement(doc, field.cachedResult)),
|
|
45
|
+
makeRun(doc, field, createWmlElement(doc, W.fldChar, { 'w:fldCharType': 'end' })),
|
|
46
|
+
];
|
|
47
|
+
}
|
|
48
|
+
/** Build the w:r element(s) for one inline spec node. */
|
|
49
|
+
export function buildInlineRuns(doc, inline) {
|
|
50
|
+
switch (inline.kind) {
|
|
51
|
+
case 'text': {
|
|
52
|
+
const run = createWmlElement(doc, W.r);
|
|
53
|
+
const rPr = buildRunPropsElement(doc, inline);
|
|
54
|
+
if (rPr)
|
|
55
|
+
run.appendChild(rPr);
|
|
56
|
+
run.appendChild(createWmlTextElement(doc, inline.text));
|
|
57
|
+
return [run];
|
|
58
|
+
}
|
|
59
|
+
case 'field':
|
|
60
|
+
return buildFieldRuns(doc, inline);
|
|
61
|
+
case 'tab':
|
|
62
|
+
return [makeRun(doc, {}, createWmlElement(doc, W.tab))];
|
|
63
|
+
case 'break': {
|
|
64
|
+
const attrs = inline.breakType === 'page' ? { 'w:type': 'page' } : undefined;
|
|
65
|
+
return [makeRun(doc, {}, createWmlElement(doc, W.br, attrs))];
|
|
66
|
+
}
|
|
67
|
+
default:
|
|
68
|
+
throw new GenerationInternalError(`Inline kind '${inline.kind}' reached the run emitter without a shipped emitter`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/generation/emit/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section-properties emitter.
|
|
3
|
+
*
|
|
4
|
+
* Shipped: page size/margins, page numbering, section break type, title-page
|
|
5
|
+
* switch, and header/footer references. The reference rIds come from the
|
|
6
|
+
* header/footer part allocation pass (emit/header-footer-part.ts), which runs
|
|
7
|
+
* before the document part so the sectPr can bind them.
|
|
8
|
+
*/
|
|
9
|
+
import type { SectionSpec } from '../types.js';
|
|
10
|
+
/** Header/footer part references for one section, allocated by the parts pass. */
|
|
11
|
+
export type SectionHeaderFooterRefs = {
|
|
12
|
+
headers: Partial<Record<'default' | 'first' | 'even', string>>;
|
|
13
|
+
footers: Partial<Record<'default' | 'first' | 'even', string>>;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Build the w:sectPr element for a section.
|
|
17
|
+
*
|
|
18
|
+
* Width/height are always emitted explicitly (never reader defaults); a
|
|
19
|
+
* landscape request swaps the dimensions and sets w:orient. Header/footer
|
|
20
|
+
* references lead the child sequence; w:titlePg is implied whenever a
|
|
21
|
+
* first-page header or footer is present.
|
|
22
|
+
*
|
|
23
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.6.13
|
|
24
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.6.12
|
|
25
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.10.6
|
|
26
|
+
*/
|
|
27
|
+
export declare function buildSectPr(doc: Document, section: SectionSpec, refs?: SectionHeaderFooterRefs): Element;
|
|
28
|
+
export declare function titlePgImplied(section: SectionSpec): boolean;
|
|
29
|
+
//# sourceMappingURL=section.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section.d.ts","sourceRoot":"","sources":["../../../src/generation/emit/section.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAgB/C,kFAAkF;AAClF,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,OAAO,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/D,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,OAAO,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAChE,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,uBAAuB,GAAG,OAAO,CA4BxG;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAE5D"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section-properties emitter.
|
|
3
|
+
*
|
|
4
|
+
* Shipped: page size/margins, page numbering, section break type, title-page
|
|
5
|
+
* switch, and header/footer references. The reference rIds come from the
|
|
6
|
+
* header/footer part allocation pass (emit/header-footer-part.ts), which runs
|
|
7
|
+
* before the document part so the sectPr can bind them.
|
|
8
|
+
*/
|
|
9
|
+
import { createWmlElement } from '../../primitives/dom-helpers.js';
|
|
10
|
+
import { OOXML, W } from '../../primitives/namespaces.js';
|
|
11
|
+
import { appendInOrder, SECTPR_ORDER } from '../ordering.js';
|
|
12
|
+
/** US Letter, in twentieths of a point. */
|
|
13
|
+
const DEFAULT_PAGE = { w: 12240, h: 15840 };
|
|
14
|
+
/** One-inch page margins, half-inch header/footer offsets, no gutter. */
|
|
15
|
+
const DEFAULT_MARGINS = {
|
|
16
|
+
top: 1440,
|
|
17
|
+
right: 1440,
|
|
18
|
+
bottom: 1440,
|
|
19
|
+
left: 1440,
|
|
20
|
+
header: 720,
|
|
21
|
+
footer: 720,
|
|
22
|
+
gutter: 0,
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Build the w:sectPr element for a section.
|
|
26
|
+
*
|
|
27
|
+
* Width/height are always emitted explicitly (never reader defaults); a
|
|
28
|
+
* landscape request swaps the dimensions and sets w:orient. Header/footer
|
|
29
|
+
* references lead the child sequence; w:titlePg is implied whenever a
|
|
30
|
+
* first-page header or footer is present.
|
|
31
|
+
*
|
|
32
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.6.13
|
|
33
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.6.12
|
|
34
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.10.6
|
|
35
|
+
*/
|
|
36
|
+
export function buildSectPr(doc, section, refs) {
|
|
37
|
+
const sectPr = createWmlElement(doc, W.sectPr);
|
|
38
|
+
const props = new Map();
|
|
39
|
+
if (refs) {
|
|
40
|
+
const headerRefs = buildReferences(doc, W.headerReference, refs.headers);
|
|
41
|
+
const footerRefs = buildReferences(doc, W.footerReference, refs.footers);
|
|
42
|
+
if (headerRefs.length > 0)
|
|
43
|
+
props.set(W.headerReference, headerRefs);
|
|
44
|
+
if (footerRefs.length > 0)
|
|
45
|
+
props.set(W.footerReference, footerRefs);
|
|
46
|
+
}
|
|
47
|
+
if (section.breakType !== undefined) {
|
|
48
|
+
props.set(W.type, createWmlElement(doc, W.type, { 'w:val': section.breakType }));
|
|
49
|
+
}
|
|
50
|
+
props.set(W.pgSz, buildPgSz(doc, section));
|
|
51
|
+
props.set(W.pgMar, buildPgMar(doc, section));
|
|
52
|
+
if (section.pageNumbering) {
|
|
53
|
+
const attrs = {};
|
|
54
|
+
if (section.pageNumbering.start !== undefined)
|
|
55
|
+
attrs['w:start'] = String(section.pageNumbering.start);
|
|
56
|
+
if (section.pageNumbering.format !== undefined)
|
|
57
|
+
attrs['w:fmt'] = section.pageNumbering.format;
|
|
58
|
+
props.set(W.pgNumType, createWmlElement(doc, W.pgNumType, attrs));
|
|
59
|
+
}
|
|
60
|
+
if (titlePgImplied(section)) {
|
|
61
|
+
props.set(W.titlePg, createWmlElement(doc, W.titlePg));
|
|
62
|
+
}
|
|
63
|
+
appendInOrder(sectPr, props, SECTPR_ORDER);
|
|
64
|
+
return sectPr;
|
|
65
|
+
}
|
|
66
|
+
export function titlePgImplied(section) {
|
|
67
|
+
return Boolean(section.titlePg || section.headers?.first || section.footers?.first);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* One reference element per declared header/footer slot, in a fixed
|
|
71
|
+
* first/default/even emission order so output is deterministic.
|
|
72
|
+
*
|
|
73
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.10.5
|
|
74
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.10.2
|
|
75
|
+
*/
|
|
76
|
+
function buildReferences(doc, localName, slots) {
|
|
77
|
+
const out = [];
|
|
78
|
+
for (const type of ['first', 'default', 'even']) {
|
|
79
|
+
const rId = slots[type];
|
|
80
|
+
if (!rId)
|
|
81
|
+
continue;
|
|
82
|
+
const el = createWmlElement(doc, localName, { 'w:type': type });
|
|
83
|
+
el.setAttributeNS(OOXML.R_NS, 'r:id', rId);
|
|
84
|
+
out.push(el);
|
|
85
|
+
}
|
|
86
|
+
return out;
|
|
87
|
+
}
|
|
88
|
+
function buildPgSz(doc, section) {
|
|
89
|
+
const requested = section.page?.sizeTwips ?? DEFAULT_PAGE;
|
|
90
|
+
const landscape = section.page?.orientation === 'landscape';
|
|
91
|
+
const w = landscape ? Math.max(requested.w, requested.h) : requested.w;
|
|
92
|
+
const h = landscape ? Math.min(requested.w, requested.h) : requested.h;
|
|
93
|
+
const attrs = { 'w:w': String(w), 'w:h': String(h) };
|
|
94
|
+
if (landscape)
|
|
95
|
+
attrs['w:orient'] = 'landscape';
|
|
96
|
+
return createWmlElement(doc, W.pgSz, attrs);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The full attribute set (top/right/bottom/left/header/footer/gutter) is
|
|
100
|
+
* always emitted because readers diverge in their defaults when attributes
|
|
101
|
+
* are omitted.
|
|
102
|
+
*
|
|
103
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.6.11
|
|
104
|
+
*/
|
|
105
|
+
function buildPgMar(doc, section) {
|
|
106
|
+
const margins = { ...DEFAULT_MARGINS, ...section.page?.marginsTwips };
|
|
107
|
+
return createWmlElement(doc, W.pgMar, {
|
|
108
|
+
'w:top': String(margins.top),
|
|
109
|
+
'w:right': String(margins.right),
|
|
110
|
+
'w:bottom': String(margins.bottom),
|
|
111
|
+
'w:left': String(margins.left),
|
|
112
|
+
'w:header': String(margins.header),
|
|
113
|
+
'w:footer': String(margins.footer),
|
|
114
|
+
'w:gutter': String(margins.gutter),
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=section.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section.js","sourceRoot":"","sources":["../../../src/generation/emit/section.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* word/settings.xml emitter.
|
|
3
|
+
*
|
|
4
|
+
* Only emitted when the document actually needs a setting — today that is
|
|
5
|
+
* `w:evenAndOddHeaders`, required for any section declaring an even-page
|
|
6
|
+
* header or footer (without it readers ignore the even-page parts entirely).
|
|
7
|
+
*
|
|
8
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.10.1
|
|
9
|
+
*/
|
|
10
|
+
import type { CompileContext } from '../context.js';
|
|
11
|
+
import type { DocumentSpec } from '../types.js';
|
|
12
|
+
export declare function emitSettingsPartIfNeeded(spec: DocumentSpec, ctx: CompileContext): void;
|
|
13
|
+
//# sourceMappingURL=settings-part.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-part.d.ts","sourceRoot":"","sources":["../../../src/generation/emit/settings-part.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAKhD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAQtF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* word/settings.xml emitter.
|
|
3
|
+
*
|
|
4
|
+
* Only emitted when the document actually needs a setting — today that is
|
|
5
|
+
* `w:evenAndOddHeaders`, required for any section declaring an even-page
|
|
6
|
+
* header or footer (without it readers ignore the even-page parts entirely).
|
|
7
|
+
*
|
|
8
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.10.1
|
|
9
|
+
*/
|
|
10
|
+
import { createWmlElement } from '../../primitives/dom-helpers.js';
|
|
11
|
+
import { OOXML, W } from '../../primitives/namespaces.js';
|
|
12
|
+
import { parseXml, serializeXml, XML_DECL } from '../../primitives/xml.js';
|
|
13
|
+
const SETTINGS_CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml';
|
|
14
|
+
const SETTINGS_REL_TYPE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings';
|
|
15
|
+
export function emitSettingsPartIfNeeded(spec, ctx) {
|
|
16
|
+
const needsEvenOdd = spec.sections.some((s) => s.headers?.even || s.footers?.even);
|
|
17
|
+
if (!needsEvenOdd)
|
|
18
|
+
return;
|
|
19
|
+
ctx.registerPart('word/settings.xml', SETTINGS_CONTENT_TYPE, SETTINGS_REL_TYPE);
|
|
20
|
+
const doc = parseXml(`<w:settings xmlns:w="${OOXML.W_NS}"/>`);
|
|
21
|
+
doc.documentElement.appendChild(createWmlElement(doc, W.evenAndOddHeaders));
|
|
22
|
+
ctx.setFileContent('word/settings.xml', XML_DECL + serializeXml(doc));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=settings-part.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-part.js","sourceRoot":"","sources":["../../../src/generation/emit/settings-part.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAI3E,MAAM,qBAAqB,GAAG,6EAA6E,CAAC;AAC5G,MAAM,iBAAiB,GAAG,8EAA8E,CAAC;AAEzG,MAAM,UAAU,wBAAwB,CAAC,IAAkB,EAAE,GAAmB;IAC9E,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACnF,IAAI,CAAC,YAAY;QAAE,OAAO;IAE1B,GAAG,CAAC,YAAY,CAAC,mBAAmB,EAAE,qBAAqB,EAAE,iBAAiB,CAAC,CAAC;IAChF,MAAM,GAAG,GAAG,QAAQ,CAAC,wBAAwB,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC;IAC9D,GAAG,CAAC,eAAgB,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC7E,GAAG,CAAC,cAAc,CAAC,mBAAmB,EAAE,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* word/styles.xml emitter.
|
|
3
|
+
*
|
|
4
|
+
* Always emitted: document defaults, the Normal paragraph style, and every
|
|
5
|
+
* declared StyleSpec. Style pPr/rPr go through the same shared property
|
|
6
|
+
* builders as direct formatting (emit/properties.ts), so a style definition
|
|
7
|
+
* and an inline run can never disagree on how a property serializes.
|
|
8
|
+
*
|
|
9
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.7.4.18
|
|
10
|
+
*/
|
|
11
|
+
import type { CompileContext } from '../context.js';
|
|
12
|
+
import type { DocumentSpec } from '../types.js';
|
|
13
|
+
export declare const STYLES_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml";
|
|
14
|
+
export declare const STYLES_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";
|
|
15
|
+
export declare function emitStylesPart(spec: DocumentSpec, ctx: CompileContext): void;
|
|
16
|
+
//# sourceMappingURL=styles-part.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles-part.d.ts","sourceRoot":"","sources":["../../../src/generation/emit/styles-part.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,aAAa,CAAC;AAG3D,eAAO,MAAM,mBAAmB,8EAA8E,CAAC;AAC/G,eAAO,MAAM,eAAe,+EAA+E,CAAC;AAQ5G,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAa5E"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* word/styles.xml emitter.
|
|
3
|
+
*
|
|
4
|
+
* Always emitted: document defaults, the Normal paragraph style, and every
|
|
5
|
+
* declared StyleSpec. Style pPr/rPr go through the same shared property
|
|
6
|
+
* builders as direct formatting (emit/properties.ts), so a style definition
|
|
7
|
+
* and an inline run can never disagree on how a property serializes.
|
|
8
|
+
*
|
|
9
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.7.4.18
|
|
10
|
+
*/
|
|
11
|
+
import { createWmlElement } from '../../primitives/dom-helpers.js';
|
|
12
|
+
import { OOXML, W } from '../../primitives/namespaces.js';
|
|
13
|
+
import { parseXml, serializeXml, XML_DECL } from '../../primitives/xml.js';
|
|
14
|
+
import { buildParagraphPropsElement, buildRunPropsElement, styleParagraphProps } from './properties.js';
|
|
15
|
+
export const STYLES_CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml';
|
|
16
|
+
export const STYLES_REL_TYPE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles';
|
|
17
|
+
const STYLES_SKELETON = `<w:styles xmlns:w="${OOXML.W_NS}"/>`;
|
|
18
|
+
/** Default run properties for docDefaults: Calibri 11pt, matching Word's baseline. */
|
|
19
|
+
const DEFAULT_FONT = 'Calibri';
|
|
20
|
+
const DEFAULT_SIZE_HALF_POINTS = '22';
|
|
21
|
+
export function emitStylesPart(spec, ctx) {
|
|
22
|
+
ctx.registerPart('word/styles.xml', STYLES_CONTENT_TYPE, STYLES_REL_TYPE);
|
|
23
|
+
const doc = parseXml(STYLES_SKELETON);
|
|
24
|
+
const root = doc.documentElement;
|
|
25
|
+
root.appendChild(buildDocDefaults(doc));
|
|
26
|
+
root.appendChild(buildNormalStyle(doc));
|
|
27
|
+
for (const style of spec.styles ?? []) {
|
|
28
|
+
root.appendChild(buildStyle(doc, style));
|
|
29
|
+
}
|
|
30
|
+
ctx.setFileContent('word/styles.xml', XML_DECL + serializeXml(doc));
|
|
31
|
+
}
|
|
32
|
+
/** @conformance ECMA-376 edition 5, Part 1 § 17.7.5.1 */
|
|
33
|
+
function buildDocDefaults(doc) {
|
|
34
|
+
const docDefaults = createWmlElement(doc, W.docDefaults);
|
|
35
|
+
const rPrDefault = createWmlElement(doc, W.rPrDefault);
|
|
36
|
+
const rPr = createWmlElement(doc, W.rPr);
|
|
37
|
+
rPr.appendChild(createWmlElement(doc, W.rFonts, {
|
|
38
|
+
'w:ascii': DEFAULT_FONT,
|
|
39
|
+
'w:hAnsi': DEFAULT_FONT,
|
|
40
|
+
'w:cs': DEFAULT_FONT,
|
|
41
|
+
}));
|
|
42
|
+
rPr.appendChild(createWmlElement(doc, W.sz, { 'w:val': DEFAULT_SIZE_HALF_POINTS }));
|
|
43
|
+
rPr.appendChild(createWmlElement(doc, W.szCs, { 'w:val': DEFAULT_SIZE_HALF_POINTS }));
|
|
44
|
+
rPrDefault.appendChild(rPr);
|
|
45
|
+
docDefaults.appendChild(rPrDefault);
|
|
46
|
+
const pPrDefault = createWmlElement(doc, W.pPrDefault);
|
|
47
|
+
docDefaults.appendChild(pPrDefault);
|
|
48
|
+
return docDefaults;
|
|
49
|
+
}
|
|
50
|
+
function buildNormalStyle(doc) {
|
|
51
|
+
const style = createWmlElement(doc, W.style, { 'w:type': 'paragraph', 'w:styleId': 'Normal', 'w:default': '1' });
|
|
52
|
+
style.appendChild(createWmlElement(doc, W.name, { 'w:val': 'Normal' }));
|
|
53
|
+
style.appendChild(createWmlElement(doc, W.qFormat));
|
|
54
|
+
return style;
|
|
55
|
+
}
|
|
56
|
+
/** @conformance ECMA-376 edition 5, Part 1 § 17.7.4.17 */
|
|
57
|
+
function buildStyle(doc, spec) {
|
|
58
|
+
const style = createWmlElement(doc, W.style, { 'w:type': spec.type, 'w:styleId': spec.styleId });
|
|
59
|
+
style.appendChild(createWmlElement(doc, W.name, { 'w:val': spec.name }));
|
|
60
|
+
if (spec.basedOn !== undefined) {
|
|
61
|
+
style.appendChild(createWmlElement(doc, W.basedOn, { 'w:val': spec.basedOn }));
|
|
62
|
+
}
|
|
63
|
+
if (spec.next !== undefined) {
|
|
64
|
+
style.appendChild(createWmlElement(doc, W.next, { 'w:val': spec.next }));
|
|
65
|
+
}
|
|
66
|
+
style.appendChild(createWmlElement(doc, W.qFormat));
|
|
67
|
+
// CT_Style declares pPr before rPr.
|
|
68
|
+
if (spec.paragraph) {
|
|
69
|
+
const pPr = buildParagraphPropsElement(doc, styleParagraphProps(spec));
|
|
70
|
+
if (pPr)
|
|
71
|
+
style.appendChild(pPr);
|
|
72
|
+
}
|
|
73
|
+
if (spec.run) {
|
|
74
|
+
const rPr = buildRunPropsElement(doc, spec.run);
|
|
75
|
+
if (rPr)
|
|
76
|
+
style.appendChild(rPr);
|
|
77
|
+
}
|
|
78
|
+
return style;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=styles-part.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles-part.js","sourceRoot":"","sources":["../../../src/generation/emit/styles-part.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAG3E,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAExG,MAAM,CAAC,MAAM,mBAAmB,GAAG,2EAA2E,CAAC;AAC/G,MAAM,CAAC,MAAM,eAAe,GAAG,4EAA4E,CAAC;AAE5G,MAAM,eAAe,GAAG,sBAAsB,KAAK,CAAC,IAAI,KAAK,CAAC;AAE9D,sFAAsF;AACtF,MAAM,YAAY,GAAG,SAAS,CAAC;AAC/B,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAEtC,MAAM,UAAU,cAAc,CAAC,IAAkB,EAAE,GAAmB;IACpE,GAAG,CAAC,YAAY,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,eAAe,CAAC,CAAC;IAE1E,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,GAAG,CAAC,eAAgB,CAAC;IAElC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACtC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,GAAG,CAAC,cAAc,CAAC,iBAAiB,EAAE,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,yDAAyD;AACzD,SAAS,gBAAgB,CAAC,GAAa;IACrC,MAAM,WAAW,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;IAEzD,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACzC,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;QAC9C,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,YAAY;QACvB,MAAM,EAAE,YAAY;KACrB,CAAC,CAAC,CAAC;IACJ,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAC;IACpF,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAC;IACtF,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC5B,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAEpC,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IACvD,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAEpC,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAa;IACrC,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;IACjH,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACxE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,0DAA0D;AAC1D,SAAS,UAAU,CAAC,GAAa,EAAE,IAAe;IAChD,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACjG,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzE,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAEpD,oCAAoC;IACpC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,0BAA0B,CAAC,GAAG,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;QACvE,IAAI,GAAG;YAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,GAAG;YAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Table emitter.
|
|
3
|
+
*
|
|
4
|
+
* Compiles TableSpec nodes into w:tbl structures: table-level properties and
|
|
5
|
+
* the column grid, then rows and cells. Cell content reuses the paragraph
|
|
6
|
+
* emitter, and nested tables recurse through buildTable. Two invariants are
|
|
7
|
+
* enforced by construction rather than checked after the fact:
|
|
8
|
+
*
|
|
9
|
+
* - every cell ends with a w:p (readers treat a cell whose last block is a
|
|
10
|
+
* table as corrupt), and
|
|
11
|
+
* - cell widths always come from somewhere deterministic — an explicit
|
|
12
|
+
* widthTwips, or the sum of the grid columns the cell spans.
|
|
13
|
+
*/
|
|
14
|
+
import type { BlockSpec, TableSpec } from '../types.js';
|
|
15
|
+
import type { BlockEmitContext } from './emit-context.js';
|
|
16
|
+
/**
|
|
17
|
+
* Build the w:tbl element for a table block.
|
|
18
|
+
*
|
|
19
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.4.37
|
|
20
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.4.59
|
|
21
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.4.48
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildTable(doc: Document, table: TableSpec, ctx?: BlockEmitContext): Element;
|
|
24
|
+
/** Dispatch a block-level spec node to its emitter (cells hold both kinds). */
|
|
25
|
+
export declare function buildBlock(doc: Document, block: BlockSpec, ctx?: BlockEmitContext): Element;
|
|
26
|
+
//# sourceMappingURL=table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/generation/emit/table.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAyD,SAAS,EAAE,MAAM,aAAa,CAAC;AAC/G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG1D;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAQ3F;AAmID,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAE3F"}
|