docxmlater 10.0.3 → 10.1.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/README.md +3 -2
- package/dist/core/Document.d.ts +22 -0
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +170 -26
- package/dist/core/Document.js.map +1 -1
- package/dist/core/DocumentParser.d.ts.map +1 -1
- package/dist/core/DocumentParser.js +90 -2
- package/dist/core/DocumentParser.js.map +1 -1
- package/dist/elements/Hyperlink.d.ts +6 -0
- package/dist/elements/Hyperlink.d.ts.map +1 -1
- package/dist/elements/Hyperlink.js +23 -0
- package/dist/elements/Hyperlink.js.map +1 -1
- package/dist/elements/Paragraph.d.ts +8 -0
- package/dist/elements/Paragraph.d.ts.map +1 -1
- package/dist/elements/Paragraph.js +25 -1
- package/dist/elements/Paragraph.js.map +1 -1
- package/dist/elements/StructuredDocumentTag.d.ts +23 -1
- package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
- package/dist/elements/StructuredDocumentTag.js +97 -0
- package/dist/elements/StructuredDocumentTag.js.map +1 -1
- package/dist/elements/TableCell.d.ts +5 -0
- package/dist/elements/TableCell.d.ts.map +1 -1
- package/dist/elements/TableCell.js +13 -0
- package/dist/elements/TableCell.js.map +1 -1
- package/dist/elements/TableRow.d.ts +3 -0
- package/dist/elements/TableRow.d.ts.map +1 -1
- package/dist/elements/TableRow.js +10 -0
- package/dist/elements/TableRow.js.map +1 -1
- package/dist/formatting/AbstractNumbering.d.ts +4 -0
- package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
- package/dist/formatting/AbstractNumbering.js +15 -0
- package/dist/formatting/AbstractNumbering.js.map +1 -1
- package/dist/formatting/NumberingInstance.d.ts +6 -0
- package/dist/formatting/NumberingInstance.d.ts.map +1 -1
- package/dist/formatting/NumberingInstance.js +55 -1
- package/dist/formatting/NumberingInstance.js.map +1 -1
- package/dist/formatting/NumberingLevel.d.ts +4 -1
- package/dist/formatting/NumberingLevel.d.ts.map +1 -1
- package/dist/formatting/NumberingLevel.js +17 -0
- package/dist/formatting/NumberingLevel.js.map +1 -1
- package/dist/formatting/Style.d.ts +6 -0
- package/dist/formatting/Style.d.ts.map +1 -1
- package/dist/formatting/Style.js +20 -0
- package/dist/formatting/Style.js.map +1 -1
- package/dist/formatting/StylesManager.d.ts +23 -0
- package/dist/formatting/StylesManager.d.ts.map +1 -1
- package/dist/formatting/StylesManager.js +65 -0
- package/dist/formatting/StylesManager.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
- package/dist/tracking/DocumentTrackingContext.js +30 -7
- package/dist/tracking/DocumentTrackingContext.js.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.js +22 -1
- package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.d.ts +1 -0
- package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.js +46 -0
- package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
- package/package.json +1 -1
- package/src/core/Document.ts +287 -31
- package/src/core/DocumentParser.ts +110 -2
- package/src/elements/Hyperlink.ts +47 -0
- package/src/elements/Paragraph.ts +61 -1
- package/src/elements/StructuredDocumentTag.ts +230 -1
- package/src/elements/TableCell.ts +36 -1
- package/src/elements/TableRow.ts +24 -1
- package/src/formatting/AbstractNumbering.ts +31 -0
- package/src/formatting/NumberingInstance.ts +88 -1
- package/src/formatting/NumberingLevel.ts +37 -3
- package/src/formatting/Style.ts +46 -0
- package/src/formatting/StylesManager.ts +125 -0
- package/src/index.ts +2 -2
- package/src/tracking/DocumentTrackingContext.ts +38 -7
- package/src/utils/InMemoryRevisionAcceptor.ts +29 -1
- package/src/utils/SelectiveRevisionAcceptor.ts +70 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectiveRevisionAcceptor.js","sourceRoot":"","sources":["../../src/utils/SelectiveRevisionAcceptor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * SelectiveRevisionAcceptor - Accept or reject specific revisions based on criteria\r\n *\r\n * Provides granular control over revision acceptance using in-memory DOM transformation.\r\n * Extends the all-or-nothing approach with selective acceptance by author, type, date,\r\n * and custom criteria.\r\n *\r\n * Uses the industry-standard in-memory transformation approach (like OpenXML PowerTools),\r\n * allowing subsequent modifications to be saved correctly.\r\n *\r\n * @module SelectiveRevisionAcceptor\r\n * @see https://github.com/OfficeDev/Open-Xml-PowerTools - RevisionAccepter.cs\r\n */\r\n\r\nimport type { Document } from '../core/Document';\r\nimport type { Paragraph, ParagraphContent } from '../elements/Paragraph';\r\nimport { Revision, RevisionType } from '../elements/Revision';\r\nimport type { Run } from '../elements/Run';\r\nimport type { Hyperlink } from '../elements/Hyperlink';\r\nimport { isRunContent, isHyperlinkContent } from '../elements/RevisionContent';\r\nimport { ChangeCategory } from './ChangelogGenerator';\r\nimport { SelectionCriteria } from './RevisionAwareProcessor';\r\n\r\n/**\r\n * Result of selective revision acceptance.\r\n */\r\nexport interface SelectiveAcceptResult {\r\n /** IDs of accepted revisions */\r\n accepted: string[];\r\n /** IDs of rejected/removed revisions */\r\n rejected: string[];\r\n /** IDs of revisions that remain */\r\n remaining: string[];\r\n /** Summary of actions taken */\r\n summary: {\r\n totalProcessed: number;\r\n acceptedCount: number;\r\n rejectedCount: number;\r\n remainingCount: number;\r\n };\r\n}\r\n\r\n/**\r\n * Provides granular control over revision acceptance using in-memory DOM transformation.\r\n * Allows subsequent modifications to be saved correctly.\r\n */\r\nexport class SelectiveRevisionAcceptor {\r\n /**\r\n * Accept revisions matching criteria using in-memory DOM transformation.\r\n * Matching revisions: content kept, revision wrapper removed.\r\n * Non-matching revisions: preserved in the document.\r\n *\r\n * @param doc - Document to process\r\n * @param criteria - Selection criteria\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static accept(\r\n doc: Document,\r\n criteria: SelectionCriteria\r\n ): SelectiveAcceptResult {\r\n const accepted: string[] = [];\r\n const remaining: string[] = [];\r\n\r\n // Check if doc has full Document API (getAllParagraphs, getTables)\r\n // or if it's a minimal mock (only getRevisionManager)\r\n const hasFullApi = typeof (doc as any).getAllParagraphs === 'function';\r\n\r\n if (hasFullApi) {\r\n // Full in-memory DOM transformation\r\n const paragraphs = (doc as any).getAllParagraphs();\r\n for (const paragraph of paragraphs) {\r\n this.processSelectiveParagraph(paragraph, criteria, 'accept', accepted, remaining);\r\n }\r\n\r\n // Process paragraphs in tables\r\n const tables = (doc as any).getTables();\r\n for (const table of tables) {\r\n for (const row of table.getRows()) {\r\n for (const cell of row.getCells()) {\r\n for (const paragraph of cell.getParagraphs()) {\r\n this.processSelectiveParagraph(paragraph, criteria, 'accept', accepted, remaining);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n // Fallback: Filter revisions from RevisionManager only (for backward compatibility)\r\n const revisionManager = doc.getRevisionManager();\r\n if (revisionManager) {\r\n const allRevisions = revisionManager.getAllRevisions();\r\n for (const rev of allRevisions) {\r\n if (this.matchesCriteria(rev, criteria)) {\r\n accepted.push(rev.getId().toString());\r\n } else {\r\n remaining.push(rev.getId().toString());\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Clear accepted revisions from RevisionManager\r\n const revisionManager = doc.getRevisionManager();\r\n if (revisionManager) {\r\n for (const id of accepted) {\r\n revisionManager.removeById(parseInt(id, 10));\r\n }\r\n }\r\n\r\n return {\r\n accepted,\r\n rejected: [],\r\n remaining,\r\n summary: {\r\n totalProcessed: accepted.length + remaining.length,\r\n acceptedCount: accepted.length,\r\n rejectedCount: 0,\r\n remainingCount: remaining.length,\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Reject revisions matching criteria using in-memory DOM transformation.\r\n * Matching revisions: content AND wrapper removed (opposite of accept).\r\n * Non-matching revisions: preserved in the document.\r\n *\r\n * For insertions: Rejecting removes the inserted content entirely.\r\n * For deletions: Rejecting keeps the deleted content (opposite of accepting).\r\n *\r\n * @param doc - Document to process\r\n * @param criteria - Selection criteria\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static reject(\r\n doc: Document,\r\n criteria: SelectionCriteria\r\n ): SelectiveAcceptResult {\r\n const rejected: string[] = [];\r\n const remaining: string[] = [];\r\n\r\n // Check if doc has full Document API (getAllParagraphs, getTables)\r\n // or if it's a minimal mock (only getRevisionManager)\r\n const hasFullApi = typeof (doc as any).getAllParagraphs === 'function';\r\n\r\n if (hasFullApi) {\r\n // Full in-memory DOM transformation\r\n const paragraphs = (doc as any).getAllParagraphs();\r\n for (const paragraph of paragraphs) {\r\n this.processSelectiveParagraph(paragraph, criteria, 'reject', rejected, remaining);\r\n }\r\n\r\n // Process paragraphs in tables\r\n const tables = (doc as any).getTables();\r\n for (const table of tables) {\r\n for (const row of table.getRows()) {\r\n for (const cell of row.getCells()) {\r\n for (const paragraph of cell.getParagraphs()) {\r\n this.processSelectiveParagraph(paragraph, criteria, 'reject', rejected, remaining);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n // Fallback: Filter revisions from RevisionManager only (for backward compatibility)\r\n const revisionManager = doc.getRevisionManager();\r\n if (revisionManager) {\r\n const allRevisions = revisionManager.getAllRevisions();\r\n for (const rev of allRevisions) {\r\n if (this.matchesCriteria(rev, criteria)) {\r\n rejected.push(rev.getId().toString());\r\n } else {\r\n remaining.push(rev.getId().toString());\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Clear rejected revisions from RevisionManager\r\n const revisionManager = doc.getRevisionManager();\r\n if (revisionManager) {\r\n for (const id of rejected) {\r\n revisionManager.removeById(parseInt(id, 10));\r\n }\r\n }\r\n\r\n return {\r\n accepted: [],\r\n rejected,\r\n remaining,\r\n summary: {\r\n totalProcessed: rejected.length + remaining.length,\r\n acceptedCount: 0,\r\n rejectedCount: rejected.length,\r\n remainingCount: remaining.length,\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Process a paragraph for selective revision acceptance/rejection.\r\n * Transforms matching revisions in-place using DOM transformation.\r\n */\r\n private static processSelectiveParagraph(\r\n paragraph: Paragraph,\r\n criteria: SelectionCriteria,\r\n action: 'accept' | 'reject',\r\n processedIds: string[],\r\n remainingIds: string[]\r\n ): void {\r\n const content = paragraph.getContent();\r\n const newContent: ParagraphContent[] = [];\r\n\r\n for (const item of content) {\r\n if (item instanceof Revision) {\r\n const revisionId = item.getId().toString();\r\n\r\n if (this.matchesCriteria(item, criteria)) {\r\n // This revision matches the criteria - process it\r\n processedIds.push(revisionId);\r\n\r\n if (action === 'accept') {\r\n // Accept: Transform based on revision type\r\n this.acceptRevisionItem(item, newContent);\r\n } else {\r\n // Reject: Transform opposite of accept\r\n this.rejectRevisionItem(item, newContent);\r\n }\r\n } else {\r\n // This revision doesn't match - keep it\r\n remainingIds.push(revisionId);\r\n newContent.push(item);\r\n }\r\n } else {\r\n // Non-revision content - keep as-is\r\n newContent.push(item);\r\n }\r\n }\r\n\r\n // Replace paragraph content with the transformed content\r\n paragraph.setContent(newContent);\r\n }\r\n\r\n /**\r\n * Accept a single revision item (unwrap insertions, remove deletions).\r\n */\r\n private static acceptRevisionItem(\r\n revision: Revision,\r\n newContent: ParagraphContent[]\r\n ): void {\r\n const revisionType = revision.getType();\r\n const childContent = revision.getContent();\r\n\r\n switch (revisionType) {\r\n case 'insert':\r\n case 'moveTo':\r\n // Unwrap: Extract child content into parent position\r\n for (const child of childContent) {\r\n if (isRunContent(child)) {\r\n newContent.push(child as Run);\r\n } else if (isHyperlinkContent(child)) {\r\n newContent.push(child);\r\n }\r\n }\r\n break;\r\n\r\n case 'delete':\r\n case 'moveFrom':\r\n // Remove: Don't add to newContent - content is deleted\r\n break;\r\n\r\n case 'runPropertiesChange':\r\n case 'paragraphPropertiesChange':\r\n case 'tablePropertiesChange':\r\n case 'tableExceptionPropertiesChange':\r\n case 'tableRowPropertiesChange':\r\n case 'tableCellPropertiesChange':\r\n case 'sectionPropertiesChange':\r\n case 'numberingChange':\r\n // Property changes: Keep content, remove change metadata\r\n for (const child of childContent) {\r\n if (isRunContent(child)) {\r\n newContent.push(child as Run);\r\n } else if (isHyperlinkContent(child)) {\r\n newContent.push(child);\r\n }\r\n }\r\n break;\r\n\r\n default:\r\n // Unknown type - keep the revision as-is for safety\r\n newContent.push(revision);\r\n }\r\n }\r\n\r\n /**\r\n * Reject a single revision item (opposite of accept).\r\n * - Rejecting an insertion removes the content\r\n * - Rejecting a deletion keeps the content (unwraps it)\r\n */\r\n private static rejectRevisionItem(\r\n revision: Revision,\r\n newContent: ParagraphContent[]\r\n ): void {\r\n const revisionType = revision.getType();\r\n const childContent = revision.getContent();\r\n\r\n switch (revisionType) {\r\n case 'insert':\r\n case 'moveTo':\r\n // Reject insertion: Remove the inserted content entirely\r\n break;\r\n\r\n case 'delete':\r\n case 'moveFrom':\r\n // Reject deletion: Keep the deleted content (unwrap)\r\n for (const child of childContent) {\r\n if (isRunContent(child)) {\r\n newContent.push(child as Run);\r\n } else if (isHyperlinkContent(child)) {\r\n newContent.push(child);\r\n }\r\n }\r\n break;\r\n\r\n case 'runPropertiesChange':\r\n case 'paragraphPropertiesChange':\r\n case 'tablePropertiesChange':\r\n case 'tableExceptionPropertiesChange':\r\n case 'tableRowPropertiesChange':\r\n case 'tableCellPropertiesChange':\r\n case 'sectionPropertiesChange':\r\n case 'numberingChange':\r\n // Rejecting property changes: Would need to restore old properties\r\n // For now, just keep content without the change metadata\r\n // (Full implementation would restore previousProperties)\r\n for (const child of childContent) {\r\n if (isRunContent(child)) {\r\n newContent.push(child as Run);\r\n } else if (isHyperlinkContent(child)) {\r\n newContent.push(child);\r\n }\r\n }\r\n break;\r\n\r\n default:\r\n // Unknown type - keep the revision as-is for safety\r\n newContent.push(revision);\r\n }\r\n }\r\n\r\n /**\r\n * Preview what would happen without making changes.\r\n *\r\n * @param doc - Document to analyze\r\n * @param criteria - Selection criteria\r\n * @param action - Action to preview\r\n * @returns Preview of what would happen\r\n */\r\n static preview(\r\n doc: Document,\r\n criteria: SelectionCriteria,\r\n action: 'accept' | 'reject'\r\n ): SelectiveAcceptResult {\r\n // Preview is the same as the actual operation but without side effects\r\n return action === 'accept'\r\n ? this.accept(doc, criteria)\r\n : this.reject(doc, criteria);\r\n }\r\n\r\n /**\r\n * Accept all revisions by a specific author.\r\n *\r\n * @param doc - Document to process\r\n * @param author - Author name to accept\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static acceptByAuthor(doc: Document, author: string): SelectiveAcceptResult {\r\n return this.accept(doc, { authors: [author] });\r\n }\r\n\r\n /**\r\n * Reject all revisions by a specific author.\r\n *\r\n * @param doc - Document to process\r\n * @param author - Author name to reject\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static rejectByAuthor(doc: Document, author: string): SelectiveAcceptResult {\r\n return this.reject(doc, { authors: [author] });\r\n }\r\n\r\n /**\r\n * Accept all revisions of specific types.\r\n *\r\n * @param doc - Document to process\r\n * @param types - Revision types to accept\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static acceptByType(doc: Document, types: RevisionType[]): SelectiveAcceptResult {\r\n return this.accept(doc, { types });\r\n }\r\n\r\n /**\r\n * Reject all revisions of specific types.\r\n *\r\n * @param doc - Document to process\r\n * @param types - Revision types to reject\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static rejectByType(doc: Document, types: RevisionType[]): SelectiveAcceptResult {\r\n return this.reject(doc, { types });\r\n }\r\n\r\n /**\r\n * Accept all revisions before a specific date.\r\n *\r\n * @param doc - Document to process\r\n * @param date - Cutoff date (exclusive)\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static acceptBeforeDate(doc: Document, date: Date): SelectiveAcceptResult {\r\n return this.accept(doc, {\r\n dateRange: { start: new Date(0), end: date },\r\n });\r\n }\r\n\r\n /**\r\n * Accept all revisions after a specific date.\r\n *\r\n * @param doc - Document to process\r\n * @param date - Start date (exclusive)\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static acceptAfterDate(doc: Document, date: Date): SelectiveAcceptResult {\r\n return this.accept(doc, {\r\n dateRange: { start: date, end: new Date() },\r\n });\r\n }\r\n\r\n /**\r\n * Accept all insertions only.\r\n *\r\n * @param doc - Document to process\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static acceptInsertionsOnly(doc: Document): SelectiveAcceptResult {\r\n return this.accept(doc, { types: ['insert'] });\r\n }\r\n\r\n /**\r\n * Accept all deletions only.\r\n *\r\n * @param doc - Document to process\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static acceptDeletionsOnly(doc: Document): SelectiveAcceptResult {\r\n return this.accept(doc, { types: ['delete'] });\r\n }\r\n\r\n /**\r\n * Reject all formatting changes (keep content changes).\r\n *\r\n * @param doc - Document to process\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static rejectFormattingChanges(doc: Document): SelectiveAcceptResult {\r\n return this.reject(doc, { categories: ['formatting'] });\r\n }\r\n\r\n /**\r\n * Accept content changes only (reject formatting).\r\n *\r\n * @param doc - Document to process\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static acceptContentChangesOnly(doc: Document): SelectiveAcceptResult {\r\n return this.accept(doc, { categories: ['content'] });\r\n }\r\n\r\n /**\r\n * Partition revisions into matching and non-matching based on criteria.\r\n */\r\n private static partitionRevisions(\r\n revisions: Revision[],\r\n criteria: SelectionCriteria\r\n ): { matching: Revision[]; nonMatching: Revision[] } {\r\n const matching: Revision[] = [];\r\n const nonMatching: Revision[] = [];\r\n\r\n for (const rev of revisions) {\r\n if (this.matchesCriteria(rev, criteria)) {\r\n matching.push(rev);\r\n } else {\r\n nonMatching.push(rev);\r\n }\r\n }\r\n\r\n return { matching, nonMatching };\r\n }\r\n\r\n /**\r\n * Check if a revision matches the given criteria.\r\n */\r\n private static matchesCriteria(\r\n revision: Revision,\r\n criteria: SelectionCriteria\r\n ): boolean {\r\n // If no criteria specified, match nothing\r\n if (\r\n !criteria.ids &&\r\n !criteria.types &&\r\n !criteria.authors &&\r\n !criteria.dateRange &&\r\n !criteria.categories &&\r\n !criteria.custom\r\n ) {\r\n return false;\r\n }\r\n\r\n // Filter by IDs\r\n if (criteria.ids && !criteria.ids.includes(revision.getId())) {\r\n return false;\r\n }\r\n\r\n // Filter by types\r\n if (criteria.types && !criteria.types.includes(revision.getType())) {\r\n return false;\r\n }\r\n\r\n // Filter by authors\r\n if (criteria.authors && !criteria.authors.includes(revision.getAuthor())) {\r\n return false;\r\n }\r\n\r\n // Filter by date range\r\n if (criteria.dateRange) {\r\n const date = revision.getDate();\r\n if (date < criteria.dateRange.start || date > criteria.dateRange.end) {\r\n return false;\r\n }\r\n }\r\n\r\n // Filter by categories\r\n if (criteria.categories) {\r\n const category = this.getRevisionCategory(revision);\r\n if (!criteria.categories.includes(category)) {\r\n return false;\r\n }\r\n }\r\n\r\n // Custom filter\r\n if (criteria.custom && !criteria.custom(revision)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Get the semantic category of a revision.\r\n */\r\n private static getRevisionCategory(revision: Revision): ChangeCategory {\r\n const type = revision.getType();\r\n\r\n if (type === 'insert' || type === 'delete') {\r\n return 'content';\r\n }\r\n if (\r\n type === 'runPropertiesChange' ||\r\n type === 'paragraphPropertiesChange' ||\r\n type === 'numberingChange'\r\n ) {\r\n return 'formatting';\r\n }\r\n if (\r\n type === 'moveFrom' ||\r\n type === 'moveTo' ||\r\n type === 'sectionPropertiesChange'\r\n ) {\r\n return 'structural';\r\n }\r\n if (\r\n type === 'tablePropertiesChange' ||\r\n type === 'tableExceptionPropertiesChange' ||\r\n type === 'tableRowPropertiesChange' ||\r\n type === 'tableCellPropertiesChange' ||\r\n type === 'tableCellInsert' ||\r\n type === 'tableCellDelete' ||\r\n type === 'tableCellMerge'\r\n ) {\r\n return 'table';\r\n }\r\n\r\n return 'content';\r\n }\r\n\r\n /**\r\n * Create an empty result.\r\n */\r\n private static emptyResult(): SelectiveAcceptResult {\r\n return {\r\n accepted: [],\r\n rejected: [],\r\n remaining: [],\r\n summary: {\r\n totalProcessed: 0,\r\n acceptedCount: 0,\r\n rejectedCount: 0,\r\n remainingCount: 0,\r\n },\r\n };\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"SelectiveRevisionAcceptor.js","sourceRoot":"","sources":["../../src/utils/SelectiveRevisionAcceptor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * SelectiveRevisionAcceptor - Accept or reject specific revisions based on criteria\r\n *\r\n * Provides granular control over revision acceptance using in-memory DOM transformation.\r\n * Extends the all-or-nothing approach with selective acceptance by author, type, date,\r\n * and custom criteria.\r\n *\r\n * Uses the industry-standard in-memory transformation approach (like OpenXML PowerTools),\r\n * allowing subsequent modifications to be saved correctly.\r\n *\r\n * @module SelectiveRevisionAcceptor\r\n * @see https://github.com/OfficeDev/Open-Xml-PowerTools - RevisionAccepter.cs\r\n */\r\n\r\nimport type { Document } from '../core/Document';\r\nimport type { Paragraph, ParagraphContent } from '../elements/Paragraph';\r\nimport { Revision, RevisionType } from '../elements/Revision';\r\nimport type { Run } from '../elements/Run';\r\nimport type { Hyperlink } from '../elements/Hyperlink';\r\nimport { isRunContent, isHyperlinkContent } from '../elements/RevisionContent';\r\nimport { ChangeCategory } from './ChangelogGenerator';\r\nimport { SelectionCriteria } from './RevisionAwareProcessor';\r\n\r\n/**\r\n * Result of selective revision acceptance.\r\n */\r\nexport interface SelectiveAcceptResult {\r\n /** IDs of accepted revisions */\r\n accepted: string[];\r\n /** IDs of rejected/removed revisions */\r\n rejected: string[];\r\n /** IDs of revisions that remain */\r\n remaining: string[];\r\n /** Summary of actions taken */\r\n summary: {\r\n totalProcessed: number;\r\n acceptedCount: number;\r\n rejectedCount: number;\r\n remainingCount: number;\r\n };\r\n}\r\n\r\n/**\r\n * Provides granular control over revision acceptance using in-memory DOM transformation.\r\n * Allows subsequent modifications to be saved correctly.\r\n */\r\nexport class SelectiveRevisionAcceptor {\r\n /**\r\n * Accept revisions matching criteria using in-memory DOM transformation.\r\n * Matching revisions: content kept, revision wrapper removed.\r\n * Non-matching revisions: preserved in the document.\r\n *\r\n * @param doc - Document to process\r\n * @param criteria - Selection criteria\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static accept(\r\n doc: Document,\r\n criteria: SelectionCriteria\r\n ): SelectiveAcceptResult {\r\n const accepted: string[] = [];\r\n const remaining: string[] = [];\r\n\r\n // Check if doc has full Document API (getAllParagraphs, getTables)\r\n // or if it's a minimal mock (only getRevisionManager)\r\n const hasFullApi = typeof (doc as any).getAllParagraphs === 'function';\r\n\r\n if (hasFullApi) {\r\n // Full in-memory DOM transformation\r\n const paragraphs = (doc as any).getAllParagraphs();\r\n for (const paragraph of paragraphs) {\r\n this.processSelectiveParagraph(paragraph, criteria, 'accept', accepted, remaining);\r\n }\r\n\r\n // Process paragraphs in tables\r\n const tables = (doc as any).getTables();\r\n for (const table of tables) {\r\n for (const row of table.getRows()) {\r\n for (const cell of row.getCells()) {\r\n for (const paragraph of cell.getParagraphs()) {\r\n this.processSelectiveParagraph(paragraph, criteria, 'accept', accepted, remaining);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n // Fallback: Filter revisions from RevisionManager only (for backward compatibility)\r\n const revisionManager = doc.getRevisionManager();\r\n if (revisionManager) {\r\n const allRevisions = revisionManager.getAllRevisions();\r\n for (const rev of allRevisions) {\r\n if (this.matchesCriteria(rev, criteria)) {\r\n accepted.push(rev.getId().toString());\r\n } else {\r\n remaining.push(rev.getId().toString());\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Clear accepted revisions from RevisionManager\r\n const revisionManager = doc.getRevisionManager();\r\n if (revisionManager) {\r\n for (const id of accepted) {\r\n revisionManager.removeById(parseInt(id, 10));\r\n }\r\n }\r\n\r\n return {\r\n accepted,\r\n rejected: [],\r\n remaining,\r\n summary: {\r\n totalProcessed: accepted.length + remaining.length,\r\n acceptedCount: accepted.length,\r\n rejectedCount: 0,\r\n remainingCount: remaining.length,\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Reject revisions matching criteria using in-memory DOM transformation.\r\n * Matching revisions: content AND wrapper removed (opposite of accept).\r\n * Non-matching revisions: preserved in the document.\r\n *\r\n * For insertions: Rejecting removes the inserted content entirely.\r\n * For deletions: Rejecting keeps the deleted content (opposite of accepting).\r\n *\r\n * @param doc - Document to process\r\n * @param criteria - Selection criteria\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static reject(\r\n doc: Document,\r\n criteria: SelectionCriteria\r\n ): SelectiveAcceptResult {\r\n const rejected: string[] = [];\r\n const remaining: string[] = [];\r\n\r\n // Check if doc has full Document API (getAllParagraphs, getTables)\r\n // or if it's a minimal mock (only getRevisionManager)\r\n const hasFullApi = typeof (doc as any).getAllParagraphs === 'function';\r\n\r\n if (hasFullApi) {\r\n // Full in-memory DOM transformation\r\n const paragraphs = (doc as any).getAllParagraphs();\r\n for (const paragraph of paragraphs) {\r\n this.processSelectiveParagraph(paragraph, criteria, 'reject', rejected, remaining);\r\n }\r\n\r\n // Process paragraphs in tables\r\n const tables = (doc as any).getTables();\r\n for (const table of tables) {\r\n for (const row of table.getRows()) {\r\n for (const cell of row.getCells()) {\r\n for (const paragraph of cell.getParagraphs()) {\r\n this.processSelectiveParagraph(paragraph, criteria, 'reject', rejected, remaining);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n // Fallback: Filter revisions from RevisionManager only (for backward compatibility)\r\n const revisionManager = doc.getRevisionManager();\r\n if (revisionManager) {\r\n const allRevisions = revisionManager.getAllRevisions();\r\n for (const rev of allRevisions) {\r\n if (this.matchesCriteria(rev, criteria)) {\r\n rejected.push(rev.getId().toString());\r\n } else {\r\n remaining.push(rev.getId().toString());\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Clear rejected revisions from RevisionManager\r\n const revisionManager = doc.getRevisionManager();\r\n if (revisionManager) {\r\n for (const id of rejected) {\r\n revisionManager.removeById(parseInt(id, 10));\r\n }\r\n }\r\n\r\n return {\r\n accepted: [],\r\n rejected,\r\n remaining,\r\n summary: {\r\n totalProcessed: rejected.length + remaining.length,\r\n acceptedCount: 0,\r\n rejectedCount: rejected.length,\r\n remainingCount: remaining.length,\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Process a paragraph for selective revision acceptance/rejection.\r\n * Transforms matching revisions in-place using DOM transformation.\r\n */\r\n private static processSelectiveParagraph(\r\n paragraph: Paragraph,\r\n criteria: SelectionCriteria,\r\n action: 'accept' | 'reject',\r\n processedIds: string[],\r\n remainingIds: string[]\r\n ): void {\r\n const content = paragraph.getContent();\r\n const newContent: ParagraphContent[] = [];\r\n\r\n for (const item of content) {\r\n if (item instanceof Revision) {\r\n const revisionId = item.getId().toString();\r\n\r\n if (this.matchesCriteria(item, criteria)) {\r\n // This revision matches the criteria - process it\r\n processedIds.push(revisionId);\r\n\r\n if (action === 'accept') {\r\n // Accept: Transform based on revision type\r\n this.acceptRevisionItem(item, newContent);\r\n } else {\r\n // Reject: Transform opposite of accept\r\n this.rejectRevisionItem(item, newContent);\r\n }\r\n } else {\r\n // This revision doesn't match - keep it\r\n remainingIds.push(revisionId);\r\n newContent.push(item);\r\n }\r\n } else {\r\n // Non-revision content - keep as-is\r\n newContent.push(item);\r\n }\r\n }\r\n\r\n // Replace paragraph content with the transformed content\r\n paragraph.setContent(newContent);\r\n\r\n // Handle paragraph mark revision markers (w:del/w:ins in w:pPr/w:rPr)\r\n // Both accept and reject clear the marker — these are metadata-only markers (no content),\r\n // so there is no content to add or remove, only the marker itself to clear.\r\n const formatting = paragraph.getFormatting();\r\n if (formatting.paragraphMarkDeletion) {\r\n const del = formatting.paragraphMarkDeletion;\r\n if (this.matchesMarkerCriteria(del, criteria)) {\r\n paragraph.clearParagraphMarkDeletion();\r\n processedIds.push(del.id.toString());\r\n } else {\r\n remainingIds.push(del.id.toString());\r\n }\r\n }\r\n if (formatting.paragraphMarkInsertion) {\r\n const ins = formatting.paragraphMarkInsertion;\r\n if (this.matchesMarkerCriteria(ins, criteria)) {\r\n paragraph.clearParagraphMarkInsertion();\r\n processedIds.push(ins.id.toString());\r\n } else {\r\n remainingIds.push(ins.id.toString());\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Check if a paragraph mark revision marker matches the given criteria.\r\n * Simplified version of matchesCriteria for non-Revision marker objects.\r\n */\r\n private static matchesMarkerCriteria(\r\n marker: { id: number; author: string; date: Date },\r\n criteria: SelectionCriteria\r\n ): boolean {\r\n // If no criteria specified, match nothing\r\n if (\r\n !criteria.ids &&\r\n !criteria.types &&\r\n !criteria.authors &&\r\n !criteria.dateRange &&\r\n !criteria.categories &&\r\n !criteria.custom\r\n ) {\r\n return false;\r\n }\r\n\r\n // Filter by IDs\r\n if (criteria.ids && !criteria.ids.includes(marker.id)) {\r\n return false;\r\n }\r\n\r\n // Filter by authors\r\n if (criteria.authors && !criteria.authors.includes(marker.author)) {\r\n return false;\r\n }\r\n\r\n // Filter by date range\r\n if (criteria.dateRange) {\r\n if (marker.date < criteria.dateRange.start || marker.date > criteria.dateRange.end) {\r\n return false;\r\n }\r\n }\r\n\r\n // types, categories, and custom filters don't apply to paragraph mark markers\r\n // (they are not Revision objects with a type/category)\r\n // If criteria only specifies types/categories/custom, markers won't match\r\n if (criteria.types || criteria.categories || criteria.custom) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Accept a single revision item (unwrap insertions, remove deletions).\r\n */\r\n private static acceptRevisionItem(\r\n revision: Revision,\r\n newContent: ParagraphContent[]\r\n ): void {\r\n const revisionType = revision.getType();\r\n const childContent = revision.getContent();\r\n\r\n switch (revisionType) {\r\n case 'insert':\r\n case 'moveTo':\r\n // Unwrap: Extract child content into parent position\r\n for (const child of childContent) {\r\n if (isRunContent(child)) {\r\n newContent.push(child as Run);\r\n } else if (isHyperlinkContent(child)) {\r\n newContent.push(child);\r\n }\r\n }\r\n break;\r\n\r\n case 'delete':\r\n case 'moveFrom':\r\n // Remove: Don't add to newContent - content is deleted\r\n break;\r\n\r\n case 'runPropertiesChange':\r\n case 'paragraphPropertiesChange':\r\n case 'tablePropertiesChange':\r\n case 'tableExceptionPropertiesChange':\r\n case 'tableRowPropertiesChange':\r\n case 'tableCellPropertiesChange':\r\n case 'sectionPropertiesChange':\r\n case 'numberingChange':\r\n // Property changes: Keep content, remove change metadata\r\n for (const child of childContent) {\r\n if (isRunContent(child)) {\r\n newContent.push(child as Run);\r\n } else if (isHyperlinkContent(child)) {\r\n newContent.push(child);\r\n }\r\n }\r\n break;\r\n\r\n default:\r\n // Unknown type - keep the revision as-is for safety\r\n newContent.push(revision);\r\n }\r\n }\r\n\r\n /**\r\n * Reject a single revision item (opposite of accept).\r\n * - Rejecting an insertion removes the content\r\n * - Rejecting a deletion keeps the content (unwraps it)\r\n */\r\n private static rejectRevisionItem(\r\n revision: Revision,\r\n newContent: ParagraphContent[]\r\n ): void {\r\n const revisionType = revision.getType();\r\n const childContent = revision.getContent();\r\n\r\n switch (revisionType) {\r\n case 'insert':\r\n case 'moveTo':\r\n // Reject insertion: Remove the inserted content entirely\r\n break;\r\n\r\n case 'delete':\r\n case 'moveFrom':\r\n // Reject deletion: Keep the deleted content (unwrap)\r\n for (const child of childContent) {\r\n if (isRunContent(child)) {\r\n newContent.push(child as Run);\r\n } else if (isHyperlinkContent(child)) {\r\n newContent.push(child);\r\n }\r\n }\r\n break;\r\n\r\n case 'runPropertiesChange':\r\n case 'paragraphPropertiesChange':\r\n case 'tablePropertiesChange':\r\n case 'tableExceptionPropertiesChange':\r\n case 'tableRowPropertiesChange':\r\n case 'tableCellPropertiesChange':\r\n case 'sectionPropertiesChange':\r\n case 'numberingChange':\r\n // Rejecting property changes: Would need to restore old properties\r\n // For now, just keep content without the change metadata\r\n // (Full implementation would restore previousProperties)\r\n for (const child of childContent) {\r\n if (isRunContent(child)) {\r\n newContent.push(child as Run);\r\n } else if (isHyperlinkContent(child)) {\r\n newContent.push(child);\r\n }\r\n }\r\n break;\r\n\r\n default:\r\n // Unknown type - keep the revision as-is for safety\r\n newContent.push(revision);\r\n }\r\n }\r\n\r\n /**\r\n * Preview what would happen without making changes.\r\n *\r\n * @param doc - Document to analyze\r\n * @param criteria - Selection criteria\r\n * @param action - Action to preview\r\n * @returns Preview of what would happen\r\n */\r\n static preview(\r\n doc: Document,\r\n criteria: SelectionCriteria,\r\n action: 'accept' | 'reject'\r\n ): SelectiveAcceptResult {\r\n // Preview is the same as the actual operation but without side effects\r\n return action === 'accept'\r\n ? this.accept(doc, criteria)\r\n : this.reject(doc, criteria);\r\n }\r\n\r\n /**\r\n * Accept all revisions by a specific author.\r\n *\r\n * @param doc - Document to process\r\n * @param author - Author name to accept\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static acceptByAuthor(doc: Document, author: string): SelectiveAcceptResult {\r\n return this.accept(doc, { authors: [author] });\r\n }\r\n\r\n /**\r\n * Reject all revisions by a specific author.\r\n *\r\n * @param doc - Document to process\r\n * @param author - Author name to reject\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static rejectByAuthor(doc: Document, author: string): SelectiveAcceptResult {\r\n return this.reject(doc, { authors: [author] });\r\n }\r\n\r\n /**\r\n * Accept all revisions of specific types.\r\n *\r\n * @param doc - Document to process\r\n * @param types - Revision types to accept\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static acceptByType(doc: Document, types: RevisionType[]): SelectiveAcceptResult {\r\n return this.accept(doc, { types });\r\n }\r\n\r\n /**\r\n * Reject all revisions of specific types.\r\n *\r\n * @param doc - Document to process\r\n * @param types - Revision types to reject\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static rejectByType(doc: Document, types: RevisionType[]): SelectiveAcceptResult {\r\n return this.reject(doc, { types });\r\n }\r\n\r\n /**\r\n * Accept all revisions before a specific date.\r\n *\r\n * @param doc - Document to process\r\n * @param date - Cutoff date (exclusive)\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static acceptBeforeDate(doc: Document, date: Date): SelectiveAcceptResult {\r\n return this.accept(doc, {\r\n dateRange: { start: new Date(0), end: date },\r\n });\r\n }\r\n\r\n /**\r\n * Accept all revisions after a specific date.\r\n *\r\n * @param doc - Document to process\r\n * @param date - Start date (exclusive)\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static acceptAfterDate(doc: Document, date: Date): SelectiveAcceptResult {\r\n return this.accept(doc, {\r\n dateRange: { start: date, end: new Date() },\r\n });\r\n }\r\n\r\n /**\r\n * Accept all insertions only.\r\n *\r\n * @param doc - Document to process\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static acceptInsertionsOnly(doc: Document): SelectiveAcceptResult {\r\n return this.accept(doc, { types: ['insert'] });\r\n }\r\n\r\n /**\r\n * Accept all deletions only.\r\n *\r\n * @param doc - Document to process\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static acceptDeletionsOnly(doc: Document): SelectiveAcceptResult {\r\n return this.accept(doc, { types: ['delete'] });\r\n }\r\n\r\n /**\r\n * Reject all formatting changes (keep content changes).\r\n *\r\n * @param doc - Document to process\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static rejectFormattingChanges(doc: Document): SelectiveAcceptResult {\r\n return this.reject(doc, { categories: ['formatting'] });\r\n }\r\n\r\n /**\r\n * Accept content changes only (reject formatting).\r\n *\r\n * @param doc - Document to process\r\n * @returns Result with accepted, rejected, and remaining revision IDs\r\n */\r\n static acceptContentChangesOnly(doc: Document): SelectiveAcceptResult {\r\n return this.accept(doc, { categories: ['content'] });\r\n }\r\n\r\n /**\r\n * Partition revisions into matching and non-matching based on criteria.\r\n */\r\n private static partitionRevisions(\r\n revisions: Revision[],\r\n criteria: SelectionCriteria\r\n ): { matching: Revision[]; nonMatching: Revision[] } {\r\n const matching: Revision[] = [];\r\n const nonMatching: Revision[] = [];\r\n\r\n for (const rev of revisions) {\r\n if (this.matchesCriteria(rev, criteria)) {\r\n matching.push(rev);\r\n } else {\r\n nonMatching.push(rev);\r\n }\r\n }\r\n\r\n return { matching, nonMatching };\r\n }\r\n\r\n /**\r\n * Check if a revision matches the given criteria.\r\n */\r\n private static matchesCriteria(\r\n revision: Revision,\r\n criteria: SelectionCriteria\r\n ): boolean {\r\n // If no criteria specified, match nothing\r\n if (\r\n !criteria.ids &&\r\n !criteria.types &&\r\n !criteria.authors &&\r\n !criteria.dateRange &&\r\n !criteria.categories &&\r\n !criteria.custom\r\n ) {\r\n return false;\r\n }\r\n\r\n // Filter by IDs\r\n if (criteria.ids && !criteria.ids.includes(revision.getId())) {\r\n return false;\r\n }\r\n\r\n // Filter by types\r\n if (criteria.types && !criteria.types.includes(revision.getType())) {\r\n return false;\r\n }\r\n\r\n // Filter by authors\r\n if (criteria.authors && !criteria.authors.includes(revision.getAuthor())) {\r\n return false;\r\n }\r\n\r\n // Filter by date range\r\n if (criteria.dateRange) {\r\n const date = revision.getDate();\r\n if (date < criteria.dateRange.start || date > criteria.dateRange.end) {\r\n return false;\r\n }\r\n }\r\n\r\n // Filter by categories\r\n if (criteria.categories) {\r\n const category = this.getRevisionCategory(revision);\r\n if (!criteria.categories.includes(category)) {\r\n return false;\r\n }\r\n }\r\n\r\n // Custom filter\r\n if (criteria.custom && !criteria.custom(revision)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Get the semantic category of a revision.\r\n */\r\n private static getRevisionCategory(revision: Revision): ChangeCategory {\r\n const type = revision.getType();\r\n\r\n if (type === 'insert' || type === 'delete') {\r\n return 'content';\r\n }\r\n if (\r\n type === 'runPropertiesChange' ||\r\n type === 'paragraphPropertiesChange' ||\r\n type === 'numberingChange'\r\n ) {\r\n return 'formatting';\r\n }\r\n if (\r\n type === 'moveFrom' ||\r\n type === 'moveTo' ||\r\n type === 'sectionPropertiesChange'\r\n ) {\r\n return 'structural';\r\n }\r\n if (\r\n type === 'tablePropertiesChange' ||\r\n type === 'tableExceptionPropertiesChange' ||\r\n type === 'tableRowPropertiesChange' ||\r\n type === 'tableCellPropertiesChange' ||\r\n type === 'tableCellInsert' ||\r\n type === 'tableCellDelete' ||\r\n type === 'tableCellMerge'\r\n ) {\r\n return 'table';\r\n }\r\n\r\n return 'content';\r\n }\r\n\r\n /**\r\n * Create an empty result.\r\n */\r\n private static emptyResult(): SelectiveAcceptResult {\r\n return {\r\n accepted: [],\r\n rejected: [],\r\n remaining: [],\r\n summary: {\r\n totalProcessed: 0,\r\n acceptedCount: 0,\r\n rejectedCount: 0,\r\n remainingCount: 0,\r\n },\r\n };\r\n }\r\n}\r\n"]}
|
package/package.json
CHANGED
package/src/core/Document.ts
CHANGED
|
@@ -368,6 +368,8 @@ export class Document {
|
|
|
368
368
|
// Track whether settings have been programmatically modified since load
|
|
369
369
|
// When true, mergeSettingsWithOriginal() will apply in-memory state to the preserved XML
|
|
370
370
|
private _settingsModified = false;
|
|
371
|
+
/** Tracks which individual boolean settings were modified via setters (not just parsed) */
|
|
372
|
+
private _modifiedBooleanSettings = new Set<string>();
|
|
371
373
|
|
|
372
374
|
// webSettings.xml round-trip preservation
|
|
373
375
|
private _originalWebSettingsXml?: string;
|
|
@@ -410,6 +412,20 @@ export class Document {
|
|
|
410
412
|
private _mirrorMargins?: boolean;
|
|
411
413
|
/** Auto hyphenation setting (w:autoHyphenation) per ECMA-376 Part 1 §17.15.1.10 */
|
|
412
414
|
private _autoHyphenation?: boolean;
|
|
415
|
+
/** Hide spelling errors (w:hideSpellingErrors) per ECMA-376 Part 1 §17.15.1.43 */
|
|
416
|
+
private _hideSpellingErrors?: boolean;
|
|
417
|
+
/** Hide grammatical errors (w:hideGrammaticalErrors) per ECMA-376 Part 1 §17.15.1.42 */
|
|
418
|
+
private _hideGrammaticalErrors?: boolean;
|
|
419
|
+
/** Default tab stop (w:defaultTabStop) per ECMA-376 Part 1 §17.15.1.25 */
|
|
420
|
+
private _defaultTabStop?: number;
|
|
421
|
+
/** Update fields on open (w:updateFields) per ECMA-376 Part 1 §17.15.1.85 */
|
|
422
|
+
private _updateFields?: boolean;
|
|
423
|
+
/** Embed TrueType fonts (w:embedTrueTypeFonts) per ECMA-376 Part 1 §17.15.1.24 */
|
|
424
|
+
private _embedTrueTypeFonts?: boolean;
|
|
425
|
+
/** Save subset of fonts (w:saveSubsetFonts) per ECMA-376 Part 1 §17.15.1.78 */
|
|
426
|
+
private _saveSubsetFonts?: boolean;
|
|
427
|
+
/** Do not track moves (w:doNotTrackMoves) per ECMA-376 Part 1 §17.15.1.35 */
|
|
428
|
+
private _doNotTrackMoves?: boolean;
|
|
413
429
|
/** Decimal symbol for locale (w:decimalSymbol) per ECMA-376 Part 1 §17.15.1.23 */
|
|
414
430
|
private _decimalSymbol?: string;
|
|
415
431
|
/** List separator for locale (w:listSeparator) per ECMA-376 Part 1 §17.15.1.55 */
|
|
@@ -846,6 +862,42 @@ export class Document {
|
|
|
846
862
|
this._autoHyphenation = true;
|
|
847
863
|
}
|
|
848
864
|
|
|
865
|
+
// Parse w:hideSpellingErrors per ECMA-376 Part 1 §17.15.1.43
|
|
866
|
+
if (/<w:hideSpellingErrors\b[^>]*\/?>/.test(settingsXml)) {
|
|
867
|
+
this._hideSpellingErrors = true;
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
// Parse w:hideGrammaticalErrors per ECMA-376 Part 1 §17.15.1.42
|
|
871
|
+
if (/<w:hideGrammaticalErrors\b[^>]*\/?>/.test(settingsXml)) {
|
|
872
|
+
this._hideGrammaticalErrors = true;
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
// Parse w:defaultTabStop per ECMA-376 Part 1 §17.15.1.25
|
|
876
|
+
const defaultTabStopMatch = /<w:defaultTabStop\s+w:val\s*=\s*"(\d+)"\s*\/?>/.exec(settingsXml);
|
|
877
|
+
if (defaultTabStopMatch?.[1]) {
|
|
878
|
+
this._defaultTabStop = parseInt(defaultTabStopMatch[1], 10);
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
// Parse w:updateFields per ECMA-376 Part 1 §17.15.1.85
|
|
882
|
+
if (/<w:updateFields\b[^>]*\/?>/.test(settingsXml)) {
|
|
883
|
+
this._updateFields = true;
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
// Parse w:embedTrueTypeFonts per ECMA-376 Part 1 §17.15.1.24
|
|
887
|
+
if (/<w:embedTrueTypeFonts\b[^>]*\/?>/.test(settingsXml)) {
|
|
888
|
+
this._embedTrueTypeFonts = true;
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
// Parse w:saveSubsetFonts per ECMA-376 Part 1 §17.15.1.78
|
|
892
|
+
if (/<w:saveSubsetFonts\b[^>]*\/?>/.test(settingsXml)) {
|
|
893
|
+
this._saveSubsetFonts = true;
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
// Parse w:doNotTrackMoves per ECMA-376 Part 1 §17.15.1.35
|
|
897
|
+
if (/<w:doNotTrackMoves\b[^>]*\/?>/.test(settingsXml)) {
|
|
898
|
+
this._doNotTrackMoves = true;
|
|
899
|
+
}
|
|
900
|
+
|
|
849
901
|
// Parse w:decimalSymbol per ECMA-376 Part 1 §17.15.1.23
|
|
850
902
|
const decimalMatch = /<w:decimalSymbol\s+w:val\s*=\s*"([^"]*)"\s*\/?>/.exec(settingsXml);
|
|
851
903
|
if (decimalMatch?.[1]) {
|
|
@@ -3240,8 +3292,8 @@ export class Document {
|
|
|
3240
3292
|
*/
|
|
3241
3293
|
private mergeSettingsWithOriginal(): string {
|
|
3242
3294
|
if (!this._originalSettingsXml) {
|
|
3243
|
-
// New document — generate from scratch
|
|
3244
|
-
|
|
3295
|
+
// New document — generate base from scratch, then apply any modified settings
|
|
3296
|
+
let xml = this.generator.generateSettings({
|
|
3245
3297
|
trackChangesEnabled: this.trackChangesEnabled,
|
|
3246
3298
|
trackFormatting: this.trackFormatting,
|
|
3247
3299
|
revisionView: this.revisionViewSettings,
|
|
@@ -3249,6 +3301,12 @@ export class Document {
|
|
|
3249
3301
|
rsids: this.getRsids(),
|
|
3250
3302
|
documentProtection: this.documentProtection,
|
|
3251
3303
|
});
|
|
3304
|
+
// Apply settings merges to the generated XML for new documents
|
|
3305
|
+
if (this._settingsModified) {
|
|
3306
|
+
xml = this.mergeTrackChangesIntoSettings(xml);
|
|
3307
|
+
xml = this.mergeBooleanSettingsIntoSettings(xml);
|
|
3308
|
+
}
|
|
3309
|
+
return xml;
|
|
3252
3310
|
}
|
|
3253
3311
|
|
|
3254
3312
|
// If nothing was modified, return original as-is for perfect round-trip
|
|
@@ -3280,6 +3338,8 @@ export class Document {
|
|
|
3280
3338
|
// Remove existing track changes elements (will re-insert if needed)
|
|
3281
3339
|
xml = xml.replace(/<w:trackRevisions\b[^>]*\/>/g, '');
|
|
3282
3340
|
xml = xml.replace(/<w:trackRevisions\b[^>]*>[\s\S]*?<\/w:trackRevisions>/g, '');
|
|
3341
|
+
xml = xml.replace(/<w:doNotTrackMoves\b[^>]*\/>/g, '');
|
|
3342
|
+
xml = xml.replace(/<w:doNotTrackMoves\b[^>]*>[\s\S]*?<\/w:doNotTrackMoves>/g, '');
|
|
3283
3343
|
xml = xml.replace(/<w:doNotTrackFormatting\b[^>]*\/>/g, '');
|
|
3284
3344
|
xml = xml.replace(/<w:doNotTrackFormatting\b[^>]*>[\s\S]*?<\/w:doNotTrackFormatting>/g, '');
|
|
3285
3345
|
xml = xml.replace(/<w:trackFormatting\b[^>]*\/>/g, '');
|
|
@@ -3302,6 +3362,11 @@ export class Document {
|
|
|
3302
3362
|
trackBlock += '\n <w:trackRevisions/>';
|
|
3303
3363
|
}
|
|
3304
3364
|
|
|
3365
|
+
// w:doNotTrackMoves (#33) — only if explicitly set
|
|
3366
|
+
if (this._doNotTrackMoves) {
|
|
3367
|
+
trackBlock += '\n <w:doNotTrackMoves/>';
|
|
3368
|
+
}
|
|
3369
|
+
|
|
3305
3370
|
// w:doNotTrackFormatting (#34) — only if explicitly disabled
|
|
3306
3371
|
if (!this.trackFormatting) {
|
|
3307
3372
|
trackBlock += '\n <w:doNotTrackFormatting/>';
|
|
@@ -3410,48 +3475,116 @@ export class Document {
|
|
|
3410
3475
|
}
|
|
3411
3476
|
|
|
3412
3477
|
/**
|
|
3413
|
-
* Merges boolean settings
|
|
3414
|
-
*
|
|
3478
|
+
* Merges boolean settings into the settings.xml preserving CT_Settings schema order.
|
|
3479
|
+
*
|
|
3480
|
+
* CT_Settings element order (relevant managed elements):
|
|
3481
|
+
* #11 embedTrueTypeFonts, #13 saveSubsetFonts, #15 mirrorMargins,
|
|
3482
|
+
* #20 hideSpellingErrors, #21 hideGrammaticalErrors,
|
|
3483
|
+
* #39 defaultTabStop, #40 autoHyphenation,
|
|
3484
|
+
* #48 evenAndOddHeaders, #61 characterSpacingControl,
|
|
3485
|
+
* #77 updateFields
|
|
3486
|
+
*
|
|
3487
|
+
* Strategy: Remove all managed elements, then re-insert a correctly ordered block
|
|
3488
|
+
* before the defaultTabStop anchor. This avoids ordering issues from incremental insertion.
|
|
3489
|
+
*
|
|
3490
|
+
* Only removes elements when explicitly set to false (not when undefined/unset).
|
|
3415
3491
|
* @private
|
|
3416
3492
|
*/
|
|
3417
3493
|
private mergeBooleanSettingsIntoSettings(xml: string): string {
|
|
3418
|
-
//
|
|
3419
|
-
|
|
3420
|
-
|
|
3421
|
-
|
|
3422
|
-
|
|
3423
|
-
|
|
3424
|
-
|
|
3425
|
-
|
|
3426
|
-
|
|
3427
|
-
|
|
3428
|
-
|
|
3429
|
-
|
|
3430
|
-
|
|
3494
|
+
// =========================================================================
|
|
3495
|
+
// BEFORE defaultTabStop (#39) — remove-and-rebuild approach
|
|
3496
|
+
// Only removes elements that were EXPLICITLY set by the user.
|
|
3497
|
+
// Unset (undefined) elements are left in their original position.
|
|
3498
|
+
//
|
|
3499
|
+
// CT_Settings order: #11 embedTrueTypeFonts, #13 saveSubsetFonts,
|
|
3500
|
+
// #15 mirrorMargins, #20 hideSpellingErrors, #21 hideGrammaticalErrors
|
|
3501
|
+
// =========================================================================
|
|
3502
|
+
|
|
3503
|
+
// Collect explicitly-set elements to add (in schema order)
|
|
3504
|
+
const preElements: string[] = [];
|
|
3505
|
+
const mod = this._modifiedBooleanSettings;
|
|
3506
|
+
|
|
3507
|
+
// Only remove and process elements that were explicitly set via setters
|
|
3508
|
+
if (mod.has('embedTrueTypeFonts')) {
|
|
3509
|
+
xml = xml.replace(/<w:embedTrueTypeFonts\b[^>]*\/?>\s*/g, '');
|
|
3510
|
+
if (this._embedTrueTypeFonts) preElements.push('<w:embedTrueTypeFonts/>');
|
|
3511
|
+
}
|
|
3512
|
+
if (mod.has('saveSubsetFonts')) {
|
|
3513
|
+
xml = xml.replace(/<w:saveSubsetFonts\b[^>]*\/?>\s*/g, '');
|
|
3514
|
+
if (this._saveSubsetFonts) preElements.push('<w:saveSubsetFonts/>');
|
|
3515
|
+
}
|
|
3516
|
+
if (mod.has('mirrorMargins')) {
|
|
3517
|
+
xml = xml.replace(/<w:mirrorMargins\b[^>]*\/?>\s*/g, '');
|
|
3518
|
+
if (this._mirrorMargins) preElements.push('<w:mirrorMargins/>');
|
|
3519
|
+
}
|
|
3520
|
+
if (mod.has('hideSpellingErrors')) {
|
|
3521
|
+
xml = xml.replace(/<w:hideSpellingErrors\b[^>]*\/?>\s*/g, '');
|
|
3522
|
+
if (this._hideSpellingErrors) preElements.push('<w:hideSpellingErrors/>');
|
|
3523
|
+
}
|
|
3524
|
+
if (mod.has('hideGrammaticalErrors')) {
|
|
3525
|
+
xml = xml.replace(/<w:hideGrammaticalErrors\b[^>]*\/?>\s*/g, '');
|
|
3526
|
+
if (this._hideGrammaticalErrors) preElements.push('<w:hideGrammaticalErrors/>');
|
|
3431
3527
|
}
|
|
3432
3528
|
|
|
3433
|
-
//
|
|
3434
|
-
|
|
3435
|
-
|
|
3529
|
+
// Insert the block before defaultTabStop (schema order preserved since array is ordered)
|
|
3530
|
+
if (preElements.length > 0) {
|
|
3531
|
+
const preBlock = preElements.map(e => '\n ' + e).join('');
|
|
3436
3532
|
if (/<w:defaultTabStop\b/.test(xml)) {
|
|
3437
|
-
xml = xml.replace(/<w:defaultTabStop\b/, '
|
|
3533
|
+
xml = xml.replace(/<w:defaultTabStop\b/, preBlock + '\n <w:defaultTabStop');
|
|
3438
3534
|
} else {
|
|
3439
|
-
xml = xml.replace(/<\/w:settings>/, '
|
|
3535
|
+
xml = xml.replace(/<\/w:settings>/, preBlock + '\n</w:settings>');
|
|
3440
3536
|
}
|
|
3441
|
-
} else if (!this._mirrorMargins && hasMM) {
|
|
3442
|
-
xml = xml.replace(/<w:mirrorMargins\b[^>]*\/?>\s*/g, '');
|
|
3443
3537
|
}
|
|
3444
3538
|
|
|
3445
|
-
//
|
|
3446
|
-
|
|
3447
|
-
|
|
3448
|
-
|
|
3449
|
-
|
|
3539
|
+
// =========================================================================
|
|
3540
|
+
// defaultTabStop (#39) — value attribute, not just boolean
|
|
3541
|
+
// =========================================================================
|
|
3542
|
+
if (mod.has('defaultTabStop') && this._defaultTabStop !== undefined) {
|
|
3543
|
+
const hasDTS = /<w:defaultTabStop\b[^>]*\/?>/.test(xml);
|
|
3544
|
+
if (hasDTS) {
|
|
3545
|
+
xml = xml.replace(/<w:defaultTabStop\b[^>]*\/?>/, `<w:defaultTabStop w:val="${this._defaultTabStop}"/>`);
|
|
3450
3546
|
} else {
|
|
3451
|
-
xml = xml.replace(/<\/w:settings>/,
|
|
3547
|
+
xml = xml.replace(/<\/w:settings>/, ` <w:defaultTabStop w:val="${this._defaultTabStop}"/>\n</w:settings>`);
|
|
3452
3548
|
}
|
|
3453
|
-
}
|
|
3549
|
+
}
|
|
3550
|
+
|
|
3551
|
+
// =========================================================================
|
|
3552
|
+
// AFTER defaultTabStop (#39) — only process explicitly set elements
|
|
3553
|
+
// #40 autoHyphenation, #48 evenAndOddHeaders
|
|
3554
|
+
// =========================================================================
|
|
3555
|
+
|
|
3556
|
+
const postElements: string[] = [];
|
|
3557
|
+
|
|
3558
|
+
if (mod.has('autoHyphenation')) {
|
|
3454
3559
|
xml = xml.replace(/<w:autoHyphenation\b[^>]*\/?>\s*/g, '');
|
|
3560
|
+
if (this._autoHyphenation) postElements.push('<w:autoHyphenation/>');
|
|
3561
|
+
}
|
|
3562
|
+
if (mod.has('evenAndOddHeaders')) {
|
|
3563
|
+
xml = xml.replace(/<w:evenAndOddHeaders\b[^>]*\/?>\s*/g, '');
|
|
3564
|
+
if (this._evenAndOddHeaders) postElements.push('<w:evenAndOddHeaders/>');
|
|
3565
|
+
}
|
|
3566
|
+
|
|
3567
|
+
if (postElements.length > 0) {
|
|
3568
|
+
const postBlock = postElements.map(e => '\n ' + e).join('');
|
|
3569
|
+
if (/<w:characterSpacingControl\b/.test(xml)) {
|
|
3570
|
+
xml = xml.replace(/<w:characterSpacingControl\b/, postBlock + '\n <w:characterSpacingControl');
|
|
3571
|
+
} else {
|
|
3572
|
+
xml = xml.replace(/<\/w:settings>/, postBlock + '\n</w:settings>');
|
|
3573
|
+
}
|
|
3574
|
+
}
|
|
3575
|
+
|
|
3576
|
+
// =========================================================================
|
|
3577
|
+
// #77: updateFields (near end of CT_Settings) — only if explicitly set via setter
|
|
3578
|
+
// =========================================================================
|
|
3579
|
+
if (mod.has('updateFields')) {
|
|
3580
|
+
xml = xml.replace(/<w:updateFields\b[^>]*\/?>\s*/g, '');
|
|
3581
|
+
if (this._updateFields) {
|
|
3582
|
+
if (/<w:compat\b/.test(xml)) {
|
|
3583
|
+
xml = xml.replace(/<w:compat\b/, '<w:updateFields w:val="true"/>\n <w:compat');
|
|
3584
|
+
} else {
|
|
3585
|
+
xml = xml.replace(/<\/w:settings>/, ' <w:updateFields w:val="true"/>\n</w:settings>');
|
|
3586
|
+
}
|
|
3587
|
+
}
|
|
3455
3588
|
}
|
|
3456
3589
|
|
|
3457
3590
|
return xml;
|
|
@@ -10826,6 +10959,7 @@ export class Document {
|
|
|
10826
10959
|
setEvenAndOddHeaders(enabled: boolean): void {
|
|
10827
10960
|
this._evenAndOddHeaders = enabled;
|
|
10828
10961
|
this._settingsModified = true;
|
|
10962
|
+
this._modifiedBooleanSettings.add('evenAndOddHeaders');
|
|
10829
10963
|
}
|
|
10830
10964
|
|
|
10831
10965
|
/**
|
|
@@ -10841,6 +10975,7 @@ export class Document {
|
|
|
10841
10975
|
setMirrorMargins(enabled: boolean): void {
|
|
10842
10976
|
this._mirrorMargins = enabled;
|
|
10843
10977
|
this._settingsModified = true;
|
|
10978
|
+
this._modifiedBooleanSettings.add('mirrorMargins');
|
|
10844
10979
|
}
|
|
10845
10980
|
|
|
10846
10981
|
/**
|
|
@@ -10856,6 +10991,119 @@ export class Document {
|
|
|
10856
10991
|
setAutoHyphenation(enabled: boolean): void {
|
|
10857
10992
|
this._autoHyphenation = enabled;
|
|
10858
10993
|
this._settingsModified = true;
|
|
10994
|
+
this._modifiedBooleanSettings.add('autoHyphenation');
|
|
10995
|
+
}
|
|
10996
|
+
|
|
10997
|
+
/**
|
|
10998
|
+
* Gets whether spelling errors are hidden (w:hideSpellingErrors)
|
|
10999
|
+
*/
|
|
11000
|
+
getHideSpellingErrors(): boolean {
|
|
11001
|
+
return this._hideSpellingErrors ?? false;
|
|
11002
|
+
}
|
|
11003
|
+
|
|
11004
|
+
/**
|
|
11005
|
+
* Sets whether to hide spelling errors (w:hideSpellingErrors)
|
|
11006
|
+
*/
|
|
11007
|
+
setHideSpellingErrors(enabled: boolean): void {
|
|
11008
|
+
this._hideSpellingErrors = enabled;
|
|
11009
|
+
this._settingsModified = true;
|
|
11010
|
+
this._modifiedBooleanSettings.add('hideSpellingErrors');
|
|
11011
|
+
}
|
|
11012
|
+
|
|
11013
|
+
/**
|
|
11014
|
+
* Gets whether grammatical errors are hidden (w:hideGrammaticalErrors)
|
|
11015
|
+
*/
|
|
11016
|
+
getHideGrammaticalErrors(): boolean {
|
|
11017
|
+
return this._hideGrammaticalErrors ?? false;
|
|
11018
|
+
}
|
|
11019
|
+
|
|
11020
|
+
/**
|
|
11021
|
+
* Sets whether to hide grammatical errors (w:hideGrammaticalErrors)
|
|
11022
|
+
*/
|
|
11023
|
+
setHideGrammaticalErrors(enabled: boolean): void {
|
|
11024
|
+
this._hideGrammaticalErrors = enabled;
|
|
11025
|
+
this._settingsModified = true;
|
|
11026
|
+
this._modifiedBooleanSettings.add('hideGrammaticalErrors');
|
|
11027
|
+
}
|
|
11028
|
+
|
|
11029
|
+
/**
|
|
11030
|
+
* Gets the default tab stop value in twips (w:defaultTabStop)
|
|
11031
|
+
*/
|
|
11032
|
+
getDefaultTabStop(): number | undefined {
|
|
11033
|
+
return this._defaultTabStop;
|
|
11034
|
+
}
|
|
11035
|
+
|
|
11036
|
+
/**
|
|
11037
|
+
* Sets the default tab stop value in twips (w:defaultTabStop)
|
|
11038
|
+
*/
|
|
11039
|
+
setDefaultTabStop(twips: number): void {
|
|
11040
|
+
this._defaultTabStop = twips;
|
|
11041
|
+
this._settingsModified = true;
|
|
11042
|
+
this._modifiedBooleanSettings.add('defaultTabStop');
|
|
11043
|
+
}
|
|
11044
|
+
|
|
11045
|
+
/**
|
|
11046
|
+
* Gets whether fields are updated on document open (w:updateFields)
|
|
11047
|
+
*/
|
|
11048
|
+
getUpdateFields(): boolean {
|
|
11049
|
+
return this._updateFields ?? false;
|
|
11050
|
+
}
|
|
11051
|
+
|
|
11052
|
+
/**
|
|
11053
|
+
* Sets whether fields should be updated on document open (w:updateFields)
|
|
11054
|
+
*/
|
|
11055
|
+
setUpdateFields(enabled: boolean): void {
|
|
11056
|
+
this._updateFields = enabled;
|
|
11057
|
+
this._settingsModified = true;
|
|
11058
|
+
this._modifiedBooleanSettings.add('updateFields');
|
|
11059
|
+
}
|
|
11060
|
+
|
|
11061
|
+
/**
|
|
11062
|
+
* Gets whether TrueType fonts are embedded (w:embedTrueTypeFonts)
|
|
11063
|
+
*/
|
|
11064
|
+
getEmbedTrueTypeFonts(): boolean {
|
|
11065
|
+
return this._embedTrueTypeFonts ?? false;
|
|
11066
|
+
}
|
|
11067
|
+
|
|
11068
|
+
/**
|
|
11069
|
+
* Sets whether to embed TrueType fonts (w:embedTrueTypeFonts)
|
|
11070
|
+
*/
|
|
11071
|
+
setEmbedTrueTypeFonts(enabled: boolean): void {
|
|
11072
|
+
this._embedTrueTypeFonts = enabled;
|
|
11073
|
+
this._settingsModified = true;
|
|
11074
|
+
this._modifiedBooleanSettings.add('embedTrueTypeFonts');
|
|
11075
|
+
}
|
|
11076
|
+
|
|
11077
|
+
/**
|
|
11078
|
+
* Gets whether only font subsets are saved (w:saveSubsetFonts)
|
|
11079
|
+
*/
|
|
11080
|
+
getSaveSubsetFonts(): boolean {
|
|
11081
|
+
return this._saveSubsetFonts ?? false;
|
|
11082
|
+
}
|
|
11083
|
+
|
|
11084
|
+
/**
|
|
11085
|
+
* Sets whether to save only font subsets (w:saveSubsetFonts)
|
|
11086
|
+
*/
|
|
11087
|
+
setSaveSubsetFonts(enabled: boolean): void {
|
|
11088
|
+
this._saveSubsetFonts = enabled;
|
|
11089
|
+
this._settingsModified = true;
|
|
11090
|
+
this._modifiedBooleanSettings.add('saveSubsetFonts');
|
|
11091
|
+
}
|
|
11092
|
+
|
|
11093
|
+
/**
|
|
11094
|
+
* Gets whether move tracking is disabled (w:doNotTrackMoves)
|
|
11095
|
+
*/
|
|
11096
|
+
getDoNotTrackMoves(): boolean {
|
|
11097
|
+
return this._doNotTrackMoves ?? false;
|
|
11098
|
+
}
|
|
11099
|
+
|
|
11100
|
+
/**
|
|
11101
|
+
* Sets whether to disable move tracking (w:doNotTrackMoves)
|
|
11102
|
+
*/
|
|
11103
|
+
setDoNotTrackMoves(enabled: boolean): void {
|
|
11104
|
+
this._doNotTrackMoves = enabled;
|
|
11105
|
+
this._settingsModified = true;
|
|
11106
|
+
this._modifiedBooleanSettings.add('doNotTrackMoves');
|
|
10859
11107
|
}
|
|
10860
11108
|
|
|
10861
11109
|
/**
|
|
@@ -12174,6 +12422,14 @@ export class Document {
|
|
|
12174
12422
|
this._evenAndOddHeaders = undefined;
|
|
12175
12423
|
this._mirrorMargins = undefined;
|
|
12176
12424
|
this._autoHyphenation = undefined;
|
|
12425
|
+
this._hideSpellingErrors = undefined;
|
|
12426
|
+
this._hideGrammaticalErrors = undefined;
|
|
12427
|
+
this._defaultTabStop = undefined;
|
|
12428
|
+
this._updateFields = undefined;
|
|
12429
|
+
this._embedTrueTypeFonts = undefined;
|
|
12430
|
+
this._saveSubsetFonts = undefined;
|
|
12431
|
+
this._doNotTrackMoves = undefined;
|
|
12432
|
+
this._modifiedBooleanSettings.clear();
|
|
12177
12433
|
this._decimalSymbol = undefined;
|
|
12178
12434
|
this._listSeparator = undefined;
|
|
12179
12435
|
this._flattenIncludePictureFields = false;
|