devexpress-richedit 25.1.1-alpha → 25.1.2-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/bin/gulpfile.js +1 -1
  2. package/bin/index-custom.js +1 -1
  3. package/bin/localization-builder.js +1 -1
  4. package/bin/nspell-index.js +1 -1
  5. package/bin/nspell.webpack.config.js +1 -1
  6. package/bin/webpack-externals.js +1 -1
  7. package/bin/webpack.config.js +1 -1
  8. package/dist/dx.richedit.d.ts +1 -1
  9. package/dist/dx.richedit.js +714 -379
  10. package/dist/dx.richedit.min.js +2 -2
  11. package/index.d.ts +1 -1
  12. package/index.js +1 -1
  13. package/lib/client/client-rich-edit.js +1 -1
  14. package/lib/client/commands/mail-merge-command.js +2 -1
  15. package/lib/client/formats/docx/export/data.d.ts +5 -1
  16. package/lib/client/formats/docx/export/data.js +3 -2
  17. package/lib/client/formats/docx/export/exporter.d.ts +2 -3
  18. package/lib/client/formats/docx/export/exporter.js +3 -3
  19. package/lib/client/formats/docx/export/exporters/base/sections.d.ts +0 -1
  20. package/lib/client/formats/docx/export/exporters/base/sections.js +2 -10
  21. package/lib/client/formats/docx/export/exporters/base/table/table.d.ts +1 -1
  22. package/lib/client/formats/docx/export/exporters/base/table/table.js +4 -4
  23. package/lib/client/formats/docx/import/destination/paragraph-properties/properties/paragraph-spacing-destination.js +6 -4
  24. package/lib/client/model-api/formats/exporter.js +2 -2
  25. package/lib/client/model-api/sub-document.js +1 -1
  26. package/lib/client/public/rich-edit.js +2 -2
  27. package/lib/common/canvas/canvas-manager.js +38 -24
  28. package/lib/common/canvas/canvas-scroll-info.d.ts +6 -3
  29. package/lib/common/canvas/canvas-scroll-info.js +9 -4
  30. package/lib/common/canvas/canvas-scroll-manager.d.ts +4 -1
  31. package/lib/common/canvas/canvas-scroll-manager.js +28 -20
  32. package/lib/common/canvas/canvas-size-info.d.ts +3 -2
  33. package/lib/common/canvas/canvas-size-info.js +4 -6
  34. package/lib/common/canvas/renderes/canvas-listener/print-layout-view-canvas-listener.js +2 -2
  35. package/lib/common/canvas/renderes/common/document-renderer.d.ts +4 -1
  36. package/lib/common/canvas/renderes/common/document-renderer.js +15 -12
  37. package/lib/common/canvas/renderes/view-manager.d.ts +5 -1
  38. package/lib/common/canvas/renderes/view-manager.js +15 -7
  39. package/lib/common/formats/i-document-exporter.d.ts +3 -0
  40. package/lib/common/formats/rtf/export/exporter.d.ts +2 -3
  41. package/lib/common/formats/rtf/export/exporter.js +3 -3
  42. package/lib/common/formats/rtf/export/exporters/rtf-content-exporter.d.ts +4 -2
  43. package/lib/common/formats/rtf/export/exporters/rtf-content-exporter.js +13 -9
  44. package/lib/common/formats/rtf/export/exporters/table/rtf-table-exporter.d.ts +3 -2
  45. package/lib/common/formats/rtf/export/exporters/table/rtf-table-exporter.js +4 -4
  46. package/lib/common/formats/rtf/export/exporters/table/states/rtf-nested-table-exporter-state.d.ts +2 -1
  47. package/lib/common/formats/rtf/export/exporters/table/states/rtf-nested-table-exporter-state.js +2 -2
  48. package/lib/common/formats/rtf/export/exporters/table/states/rtf-table-exporter-state-base.d.ts +4 -2
  49. package/lib/common/formats/rtf/export/exporters/table/states/rtf-table-exporter-state-base.js +16 -9
  50. package/lib/common/formats/rtf/export/exporters/table/states/rtf-table-exporter-state.d.ts +2 -1
  51. package/lib/common/formats/rtf/export/exporters/table/states/rtf-table-exporter-state.js +2 -2
  52. package/lib/common/formats/rtf/import/table/normalization/apply-use-values.d.ts +6 -0
  53. package/lib/common/formats/rtf/import/table/normalization/apply-use-values.js +90 -0
  54. package/lib/common/formats/rtf/import/table/table-converter.js +7 -2
  55. package/lib/common/formats/rtf/importer-in-subdocument.d.ts +1 -2
  56. package/lib/common/formats/rtf/importer-in-subdocument.js +4 -3
  57. package/lib/common/input-controller.d.ts +5 -5
  58. package/lib/common/input-controller.js +16 -12
  59. package/lib/common/layout/document-layout.d.ts +5 -0
  60. package/lib/common/layout/document-layout.js +10 -0
  61. package/lib/common/layout/main-structures/layout-page-area.d.ts +3 -0
  62. package/lib/common/layout/main-structures/layout-page-area.js +6 -0
  63. package/lib/common/layout/main-structures/layout-page.d.ts +3 -0
  64. package/lib/common/layout/main-structures/layout-page.js +8 -0
  65. package/lib/common/layout/main-structures/layout-row.js +1 -2
  66. package/lib/common/layout-formatter/floating/position-calculators/horizontal.d.ts +1 -0
  67. package/lib/common/layout-formatter/floating/position-calculators/horizontal.js +16 -12
  68. package/lib/common/layout-formatter/row/size-engine/row-formatting-info.d.ts +4 -1
  69. package/lib/common/layout-formatter/row/size-engine/row-formatting-info.js +36 -2
  70. package/lib/common/layout-formatter/row/states.js +0 -2
  71. package/lib/common/layout-formatter/row/tab-info.js +5 -4
  72. package/lib/common/layout-formatter/table/info/table-info.d.ts +0 -1
  73. package/lib/common/layout-formatter/table/info/table-info.js +2 -18
  74. package/lib/common/layout-formatter/table/size-compressor.js +9 -2
  75. package/lib/common/layout-formatter/table/table-alignment-applier.js +0 -2
  76. package/lib/common/model/changes/change.d.ts +2 -1
  77. package/lib/common/model/changes/enums.d.ts +2 -1
  78. package/lib/common/model/changes/enums.js +1 -0
  79. package/lib/common/model/changes/model/zoom-level.d.ts +8 -0
  80. package/lib/common/model/changes/model/zoom-level.js +8 -0
  81. package/lib/common/model/creator/creator.js +6 -0
  82. package/lib/common/model/manipulators/model-manipulator.d.ts +2 -1
  83. package/lib/common/model/manipulators/model-manipulator.js +4 -0
  84. package/lib/common/model/paragraph/paragraph-style.d.ts +2 -1
  85. package/lib/common/model/paragraph/paragraph-style.js +2 -1
  86. package/lib/common/model/tables/secondary-structures/table-base-structures.d.ts +2 -1
  87. package/lib/common/model/tables/secondary-structures/table-base-structures.js +1 -0
  88. package/lib/common/mouse-handler/mouse-handler/mouse-handler-default-state.d.ts +1 -1
  89. package/lib/common/mouse-handler/mouse-handler/mouse-handler-default-state.js +22 -25
  90. package/lib/common/rich-edit-core.js +18 -18
  91. package/lib/common/ui/ruler/ruler.js +2 -0
  92. package/lib/common/utils/mixed-size.d.ts +27 -0
  93. package/lib/common/utils/mixed-size.js +91 -0
  94. package/lib/common/utils/size-utils.d.ts +14 -7
  95. package/lib/common/utils/size-utils.js +43 -18
  96. package/package.json +3 -3
@@ -28,6 +28,7 @@ import { CanvasUtils } from '../../utils';
28
28
  import { ScrollState } from '../../../scroll/model-states';
29
29
  import { isDefined } from '@devexpress/utils/lib/utils/common';
30
30
  import { StringUtils } from '@devexpress/utils/lib/utils/string';
31
+ import { ModelChangeType } from '../../../model/changes/enums';
31
32
  export class SimpleViewCanvasSizeManager {
32
33
  constructor(canvasManager, control) {
33
34
  this.size = new Size(0, 0);
@@ -52,6 +53,10 @@ export class SimpleViewCanvasSizeManager {
52
53
  this.resizeFrameId = null;
53
54
  this.resizeObserver.disconnect();
54
55
  }
56
+ modelChanged(change) {
57
+ if (change.type == ModelChangeType.ZoomLevelChanged && this.control.innerClientProperties.viewsSettings.isSimpleView)
58
+ this.changeSize(true);
59
+ }
55
60
  changeSize(force) {
56
61
  const curr = new Size(this.canvasManager.getCanvasWidth(), this.canvasManager.controlHeightProvider.getVisibleAreaHeight(false));
57
62
  if (force || !curr.equals(this.size)) {
@@ -77,18 +82,16 @@ export class SimpleViewCanvasSizeManager {
77
82
  this.sizeUpdated = true;
78
83
  }
79
84
  changeSizeCore() {
80
- {
81
- ListUtils.forEach(this.control.viewManager.cache, (_val) => this.control.viewManager.renderer.removePage(1), 1);
82
- this.control.viewManager.ensureFirstPageIsRendered();
83
- this.control.innerClientProperties.viewsSettings.widthOfPage = this.canvasManager.getCanvasWidth();
84
- if (this.control.layoutFormatterManager) {
85
- this.control.layoutFormatterManager.invalidator.onChangedAllLayout();
86
- this.control.selection.scrollManager.setScroll(new ScrollState().byModelPosition(this.control.selection)
87
- .setModelPosition(this.control.selection.lastSelectedInterval.start).useStdRelativePosition().useStdOffset());
88
- }
89
- this.control.owner.adjustControl();
90
- this.control.horizontalRulerControl.update();
85
+ ListUtils.forEach(this.control.viewManager.cache, (_val) => this.control.viewManager.renderer.removePage(1), 1);
86
+ this.control.viewManager.ensureFirstPageIsRendered();
87
+ this.control.innerClientProperties.viewsSettings.widthOfPage = this.canvasManager.getCanvasWidth();
88
+ if (this.control.layoutFormatterManager) {
89
+ this.control.layoutFormatterManager.invalidator.onChangedAllLayout();
90
+ this.control.selection.scrollManager.setScroll(new ScrollState().byModelPosition(this.control.selection)
91
+ .setModelPosition(this.control.selection.lastSelectedInterval.start).useStdRelativePosition().useStdOffset());
91
92
  }
93
+ this.control.owner.adjustControl();
94
+ this.control.horizontalRulerControl.update();
92
95
  }
93
96
  }
94
97
  export class DocumentRenderer {
@@ -272,7 +275,7 @@ export class DocumentRenderer {
272
275
  }
273
276
  }
274
277
  updatePageSize(page, pageElement) {
275
- if (pageElement.offsetHeight != page.height || pageElement.offsetWidth != page.width)
278
+ if (pageElement.offsetHeight != Math.round(page.height) || pageElement.offsetWidth != Math.round(page.width))
276
279
  DomUtils.setStyleSize(pageElement.style, page);
277
280
  }
278
281
  updatePageClasses(pageElement) {
@@ -24,7 +24,10 @@ import { MisspelledSelectionRenderer } from './selection-renderers/misspelled-se
24
24
  import { RangePermissionRenderer } from './selection-renderers/range-permission-renderer';
25
25
  import { SearchSelectionRenderer } from './selection-renderers/search-selection-renderer';
26
26
  import { SelectionRenderer } from './selection-renderers/selection-renderer';
27
- export declare class ViewManager implements ILayoutChangesListener {
27
+ import { IZoomLevelHolder } from '../../interfaces/i-zoom-level-holder';
28
+ import { IModelChangesListener } from '../../interfaces/model-changes-listener';
29
+ import { ModelChange } from '../../model/changes/change';
30
+ export declare class ViewManager implements ILayoutChangesListener, IZoomLevelHolder, IModelChangesListener {
28
31
  private renderers;
29
32
  get renderer(): DocumentRenderer;
30
33
  get printLayoutRenderer(): DocumentRenderer;
@@ -56,6 +59,7 @@ export declare class ViewManager implements ILayoutChangesListener {
56
59
  readonly control: IRichEditControl;
57
60
  constructor(control: IRichEditControl, canvas: HTMLDivElement, eventManager: IEventManager, stringResources: StringResources, horizontalRuler: IRulerControl, inputController: InputController, innerClientProperties: InnerClientProperties, readOnlyPropertyHolder: IReadOnlyPropertyHolder, layoutFormatterManagerHolder: ILayoutFormatterManagerHolder, internalApi: IInternalApi, fieldOptions: FieldsSettings);
58
61
  dispose(): void;
62
+ modelChanged(change: ModelChange): void;
59
63
  adjust(force: boolean): void;
60
64
  NotifyPagesReady(pageChanges: PageChange[]): void;
61
65
  NotifyFullyFormatted(_pageCount: number): void;
@@ -26,13 +26,15 @@ import { SearchSelectionRenderer } from './selection-renderers/search-selection-
26
26
  import { SelectionRenderer } from './selection-renderers/selection-renderer';
27
27
  import { ControlOptions, DocumentCapability } from '../../model/options/control';
28
28
  import { RichEditClientCommand } from '../../commands/client-command';
29
+ import { ZoomLevelChange } from '../../model/changes/model/zoom-level';
30
+ import { ModelChangeType } from '../../model/changes/enums';
29
31
  export class ViewManager {
30
32
  get renderer() { return this.renderers[this.innerClientProperties.viewsSettings.viewType]; }
31
33
  get printLayoutRenderer() { return this.renderers[ViewType.PrintLayout]; }
32
34
  get canvasListener() { return this.canvasListeners[this.innerClientProperties.viewsSettings.viewType]; }
33
35
  constructor(control, canvas, eventManager, stringResources, horizontalRuler, inputController, innerClientProperties, readOnlyPropertyHolder, layoutFormatterManagerHolder, internalApi, fieldOptions) {
34
36
  this.cache = [];
35
- this.sizes = new CanvasSizeInfo();
37
+ this.sizes = new CanvasSizeInfo(this);
36
38
  this.control = control;
37
39
  this.readOnlyPropertyHolder = readOnlyPropertyHolder;
38
40
  this.layoutFormatterManagerHolder = layoutFormatterManagerHolder;
@@ -67,6 +69,13 @@ export class ViewManager {
67
69
  this.selection.dispose();
68
70
  this.pagesContainer = null;
69
71
  }
72
+ modelChanged(change) {
73
+ if (change.type == ModelChangeType.ZoomLevelChanged) {
74
+ this.canvas.scrollTop = this.canvas.scrollTop / change.prevZoomLevel * change.zoomLevel;
75
+ this.pagesContainer.style.zoom = change.zoomLevel.toString();
76
+ this.sizes.updateSize(this.canvas);
77
+ }
78
+ }
70
79
  adjust(force) {
71
80
  if ((force || !this.sizes.isInitialized()) && this.cache.length > 0) {
72
81
  const firstRenderedPageIndex = Math.min(this.cache.length, Math.max(0, ListUtils.indexBy(this.layout.pages, (page) => page.flags.get(LayoutPageFlags.ContentRendered))));
@@ -104,7 +113,9 @@ export class ViewManager {
104
113
  const pageInfo = layoutSelection.selectionInfo.pageInfos[pageIndex];
105
114
  const item = pageInfo.oldItems[0];
106
115
  const layoutPage = this.layout.pages[pageIndex];
107
- this.inputController.setPosition(layoutPage.x + this.cache[pageIndex].page.offsetLeft + item.x, this.sizes.getPageOffsetY(layoutPage) + item.y);
116
+ const x = layoutPage.x + this.cache[pageIndex].page.offsetLeft + item.x;
117
+ const y = this.sizes.getPageOffsetY(layoutPage) + item.y;
118
+ this.inputController.setPosition(x, y);
108
119
  }
109
120
  }
110
121
  NotifySearchSelectionLayoutChanged() {
@@ -169,12 +180,9 @@ export class ViewManager {
169
180
  }
170
181
  get zoomLevel() { return this.innerClientProperties.viewsSettings.zoomLevel; }
171
182
  set zoomLevel(value) {
172
- this.pagesContainer.style.zoom = value.toString();
183
+ const prevZoomLevel = this.zoomLevel;
173
184
  this.innerClientProperties.viewsSettings.zoomLevel = value;
174
- if (this.control.innerClientProperties.viewsSettings.isSimpleView) {
175
- this.canvasManager.simpleViewCanvasSizeManager.changeSize(true);
176
- }
177
- this.control.horizontalRulerControl.update();
185
+ this.control.modelManager.modelManipulator.notifyModelChanged(new ZoomLevelChange(this.zoomLevel, prevZoomLevel));
178
186
  }
179
187
  get allowZoom() { return ControlOptions.isEnabled(this.control.modelManager.richOptions.control.allowZoom); }
180
188
  set allowZoom(value) {
@@ -1,6 +1,8 @@
1
1
  import { IPictureRenderer } from "../canvas/picture-renderer";
2
2
  import { DocumentFormat } from "../document-format";
3
+ import { Grid } from "../layout-formatter/table/grid-engine/grid";
3
4
  import { IModelManager } from "../model-manager";
5
+ import { Table } from "../model/tables/main-structures/table";
4
6
  import { IRichEditUnitConverter } from "../utils/unit-converter";
5
7
  export interface IDocumentExporter {
6
8
  exportToBlob(callback: (blob: Blob) => void): any;
@@ -14,5 +16,6 @@ export interface IExportModelOptions {
14
16
  sessionGuid: string;
15
17
  clientGuid: string;
16
18
  lastMaxNumPages?: number;
19
+ grids?: Map<Table, Grid>;
17
20
  pageIndex?: number;
18
21
  }
@@ -1,7 +1,6 @@
1
- import { IDocumentExporter } from '../../i-document-exporter';
1
+ import { IDocumentExporter, IExportModelOptions } from '../../i-document-exporter';
2
2
  import { ColorModelInfo } from '../../../model/color/color-model-info';
3
3
  import { DocumentModel } from '../../../model/document-model';
4
- import { ModelManipulator } from '../../../model/manipulators/model-manipulator';
5
4
  import { RtfContentExporter } from './exporters/rtf-content-exporter';
6
5
  import { RtfExportHelper } from './helpers/rtf-export-helper';
7
6
  import { RtfBuilder } from './rtf-builder';
@@ -13,7 +12,7 @@ export declare class RtfExporter implements IDocumentExporter {
13
12
  contentExporter: RtfContentExporter;
14
13
  private modelManipulator;
15
14
  get documentModel(): DocumentModel;
16
- constructor(modelManipulator: ModelManipulator, options: RtfDocumentExporterOptions);
15
+ constructor(exportModelOptions: IExportModelOptions, options: RtfDocumentExporterOptions);
17
16
  exportToBlob(callback: (blob: Blob) => void): void;
18
17
  exportToBase64(callback: (base64: string) => void): void;
19
18
  exportAsString(): string;
@@ -11,11 +11,11 @@ import { RtfContentExporter } from './exporters/rtf-content-exporter';
11
11
  import { RtfExportHelper } from './helpers/rtf-export-helper';
12
12
  export class RtfExporter {
13
13
  get documentModel() { return this.modelManipulator.model; }
14
- constructor(modelManipulator, options) {
15
- this.modelManipulator = modelManipulator;
14
+ constructor(exportModelOptions, options) {
15
+ this.modelManipulator = exportModelOptions.modelManager.modelManipulator;
16
16
  this.options = options;
17
17
  this.rtfExportHelper = new RtfExportHelper();
18
- this.contentExporter = new RtfContentExporter(this.documentModel, options, this.rtfExportHelper);
18
+ this.contentExporter = new RtfContentExporter(exportModelOptions, options, this.rtfExportHelper);
19
19
  this.rtfBuilder = this.contentExporter.createRtfBuilder();
20
20
  }
21
21
  exportToBlob(callback) {
@@ -8,6 +8,7 @@ import { Section } from '../../../../model/section/section';
8
8
  import { SubDocument } from '../../../../model/sub-document';
9
9
  import { FooterSubDocumentInfo, HeaderSubDocumentInfo } from '../../../../model/sub-document-infos';
10
10
  import { ConditionalTableStyleFormatting } from '../../../../model/tables/secondary-structures/table-base-structures';
11
+ import { IExportModelOptions } from '../../../../formats/i-document-exporter';
11
12
  import { RtfExportHelper } from '../helpers/rtf-export-helper';
12
13
  import { PieceTableNumberingListCountersManager } from '../piece-table-numbering-list-counters-manager';
13
14
  import { RtfBuilder } from '../rtf-builder';
@@ -17,7 +18,7 @@ import { RtfParagraphPropertiesExporter } from './rtf-paragraph-properties-expor
17
18
  import { RtfSectionPropertiesExporter } from './rtf-section-properties-exporter';
18
19
  export type RunHandler = (run: RunBase, runText: string, absolutePosition: number) => void;
19
20
  export declare class RtfContentExporter {
20
- documentModel: DocumentModel;
21
+ exportModelOptions: IExportModelOptions;
21
22
  subDocument: SubDocument;
22
23
  currentSection: Section;
23
24
  static readonly verticalAlignmentTypes: Record<number, string>;
@@ -44,9 +45,10 @@ export declare class RtfContentExporter {
44
45
  private bookmarksIterator;
45
46
  private permissionsIterator;
46
47
  tableIterator: TableIterator;
48
+ get documentModel(): DocumentModel;
47
49
  private startSectionParagraphIndex;
48
50
  private shouldFourceUpdateIterators;
49
- constructor(documentModel: DocumentModel, options: RtfDocumentExporterOptions, rtfExportHelper: RtfExportHelper);
51
+ constructor(exportModelOptions: IExportModelOptions, options: RtfDocumentExporterOptions, rtfExportHelper: RtfExportHelper);
50
52
  createRtfBuilder(): RtfBuilder;
51
53
  export(): void;
52
54
  shouldSplitRuns(): boolean;
@@ -37,17 +37,18 @@ import { RtfTableExporter } from './table/rtf-table-exporter';
37
37
  export class RtfContentExporter {
38
38
  get shouldExportHiddenText() { return true; }
39
39
  ;
40
- constructor(documentModel, options, rtfExportHelper) {
40
+ get documentModel() { return this.exportModelOptions.modelManager.modelManipulator.model; }
41
+ constructor(exportModelOptions, options, rtfExportHelper) {
41
42
  this.shouldFourceUpdateIterators = false;
42
- this.documentModel = documentModel;
43
+ this.exportModelOptions = exportModelOptions;
43
44
  this.subDocument = this.documentModel.mainSubDocument;
44
45
  this.pieceTableNumberingListCounters = new PieceTableNumberingListCountersManager();
45
46
  this.rtfExportHelper = rtfExportHelper;
46
47
  this.options = options;
47
48
  this.rtfBuilder = this.createRtfBuilder();
48
- this.paragraphPropertiesExporter = new RtfParagraphPropertiesExporter(documentModel, rtfExportHelper, this.rtfBuilder);
49
- this.characterPropertiesExporter = new RtfCharacterPropertiesExporter(documentModel, rtfExportHelper, this.rtfBuilder, options);
50
- this.sectionPropertiesExporter = new RtfSectionPropertiesExporter(documentModel, rtfExportHelper, this.rtfBuilder);
49
+ this.paragraphPropertiesExporter = new RtfParagraphPropertiesExporter(this.documentModel, rtfExportHelper, this.rtfBuilder);
50
+ this.characterPropertiesExporter = new RtfCharacterPropertiesExporter(this.documentModel, rtfExportHelper, this.rtfBuilder, options);
51
+ this.sectionPropertiesExporter = new RtfSectionPropertiesExporter(this.documentModel, rtfExportHelper, this.rtfBuilder);
51
52
  this.runHandlerMap = new MapCreator()
52
53
  .add(RunType.TextRun, this.exportTextRun)
53
54
  .add(RunType.FieldCodeStartRun, this.fieldCodeStartRunHandler)
@@ -257,7 +258,7 @@ export class RtfContentExporter {
257
258
  value = "00000000";
258
259
  }
259
260
  else {
260
- const view = new DataView(hash, 0);
261
+ const view = new DataView(hash.buffer, 0);
261
262
  const hashValue = view.getInt32(0);
262
263
  value = this.documentModel.simpleFormattersManager.formatString("{0:x8}", hashValue);
263
264
  }
@@ -433,11 +434,14 @@ export class RtfContentExporter {
433
434
  this.exportSingleParagraph(paragraph);
434
435
  return paragraphIndex;
435
436
  }
436
- else
437
- return RtfTableExporter.exportTable(this, tablesInfo[0].table.getTopLevelParent()) - this.startSectionParagraphIndex;
437
+ else {
438
+ const table = tablesInfo[0].table.getTopLevelParent();
439
+ const grid = this.exportModelOptions.grids.get(table);
440
+ return RtfTableExporter.exportTable(this, table, grid) - this.startSectionParagraphIndex;
441
+ }
438
442
  }
439
443
  exportSingleParagraph(paragraph) {
440
- this.exportParagraphCore(paragraph, 0, 0, -1);
444
+ this.exportParagraphCore(paragraph, 0, ConditionalTableStyleFormatting.None, -1);
441
445
  this.finishParagraph(paragraph);
442
446
  }
443
447
  finishParagraph(paragraph) {
@@ -1,6 +1,7 @@
1
+ import { Grid } from '../../../../../layout-formatter/table/grid-engine/grid';
1
2
  import { Table } from '../../../../../model/tables/main-structures/table';
2
3
  import { RtfContentExporter } from '../rtf-content-exporter';
3
4
  export declare class RtfTableExporter {
4
- static exportTable(rtfContentExporter: RtfContentExporter, table: Table): number;
5
- static exportNestedTable(rtfContentExporter: RtfContentExporter, table: Table, nestingLevel: number): number;
5
+ static exportTable(rtfContentExporter: RtfContentExporter, table: Table, grid: Grid): number;
6
+ static exportNestedTable(rtfContentExporter: RtfContentExporter, table: Table, grid: Grid, nestingLevel: number): number;
6
7
  }
@@ -1,13 +1,13 @@
1
1
  import { RtfNestedTableExporterState } from './states/rtf-nested-table-exporter-state';
2
2
  import { RtfTableExporterState } from './states/rtf-table-exporter-state';
3
3
  export class RtfTableExporter {
4
- static exportTable(rtfContentExporter, table) {
5
- new RtfTableExporterState(rtfContentExporter, table).export();
4
+ static exportTable(rtfContentExporter, table, grid) {
5
+ new RtfTableExporterState(rtfContentExporter, table, grid).export();
6
6
  rtfContentExporter.tableIterator.update(table.getEndPosition());
7
7
  return rtfContentExporter.subDocument.getParagraphIndexByPosition(table.getEndPosition() - 1);
8
8
  }
9
- static exportNestedTable(rtfContentExporter, table, nestingLevel) {
10
- new RtfNestedTableExporterState(rtfContentExporter, table, nestingLevel).export();
9
+ static exportNestedTable(rtfContentExporter, table, grid, nestingLevel) {
10
+ new RtfNestedTableExporterState(rtfContentExporter, table, grid, nestingLevel).export();
11
11
  rtfContentExporter.tableIterator.update(table.getEndPosition());
12
12
  return rtfContentExporter.subDocument.getParagraphIndexByPosition(table.getEndPosition() - 1);
13
13
  }
@@ -1,9 +1,10 @@
1
+ import { Grid } from '../../../../../../layout-formatter/table/grid-engine/grid';
1
2
  import { Table } from '../../../../../../model/tables/main-structures/table';
2
3
  import { TableRow } from '../../../../../../model/tables/main-structures/table-row';
3
4
  import { RtfContentExporter } from '../../rtf-content-exporter';
4
5
  import { RtfTableExporterStateBase } from './rtf-table-exporter-state-base';
5
6
  export declare class RtfNestedTableExporterState extends RtfTableExporterStateBase {
6
- constructor(rtfExporter: RtfContentExporter, table: Table, nestingLevel: number);
7
+ constructor(rtfExporter: RtfContentExporter, table: Table, grid: Grid, nestingLevel: number);
7
8
  export(): void;
8
9
  protected writeParagraphEndMark(): void;
9
10
  protected exportRow(row: TableRow, rowIndex: number): void;
@@ -1,8 +1,8 @@
1
1
  import { RtfExportSR } from '../../../../translation-table/rtf-export-sr';
2
2
  import { RtfTableExporterStateBase } from './rtf-table-exporter-state-base';
3
3
  export class RtfNestedTableExporterState extends RtfTableExporterStateBase {
4
- constructor(rtfExporter, table, nestingLevel) {
5
- super(rtfExporter, table, nestingLevel);
4
+ constructor(rtfExporter, table, grid, nestingLevel) {
5
+ super(rtfExporter, table, grid, nestingLevel);
6
6
  }
7
7
  export() {
8
8
  super.exportBase();
@@ -6,6 +6,7 @@ import { TableCell } from '../../../../../../model/tables/main-structures/table-
6
6
  import { TableRow } from '../../../../../../model/tables/main-structures/table-row';
7
7
  import { ConditionalTableStyleFormatting } from '../../../../../../model/tables/secondary-structures/table-base-structures';
8
8
  import { TableWidthUnit } from '../../../../../../model/tables/secondary-structures/table-units';
9
+ import { Grid } from '../../../../../../layout-formatter/table/grid-engine/grid';
9
10
  import { RtfBuilder } from '../../../rtf-builder';
10
11
  import { RtfContentExporter } from '../../rtf-content-exporter';
11
12
  import { RtfTableCellPropertiesExporter } from '../rtf-table-cell-properties-exporter';
@@ -17,10 +18,11 @@ export declare abstract class RtfTableExporterStateBase {
17
18
  tableStyleIndex: number;
18
19
  rowLeftOffset: number;
19
20
  readonly table: Table;
21
+ readonly grid: Grid;
20
22
  readonly tableRowPropertiesExporter: RtfTableRowPropertiesExporter;
21
23
  readonly tableCellPropertiesExporter: RtfTableCellPropertiesExporter;
22
24
  readonly tablePropertiesExporter: RtfTablePropertiesExporter;
23
- protected constructor(rtfExporter: RtfContentExporter, table: Table, nestingLevel: number);
25
+ protected constructor(rtfExporter: RtfContentExporter, table: Table, grid: Grid, nestingLevel: number);
24
26
  protected get rtfBuilder(): RtfBuilder;
25
27
  protected get documentModel(): DocumentModel;
26
28
  protected get subDocument(): SubDocument;
@@ -36,7 +38,7 @@ export declare abstract class RtfTableExporterStateBase {
36
38
  protected abstract exportRow(row: TableRow, rowIndex: number): void;
37
39
  protected abstract writeParagraphEndMark(): void;
38
40
  exportRowProperties(row: TableRow, rowIndex: number): void;
39
- getCellWidth(virtualColumnIndex: number): number;
41
+ getCellWidth(leftSideIndex: number, columnSpan: number): number;
40
42
  calculateRowLeft(row: TableRow, indent: TableWidthUnit): number;
41
43
  protected calculateRowLeftOffset(row: TableRow): number;
42
44
  getActualWidth(unit: TableWidthUnit): number;
@@ -4,6 +4,7 @@ import { TableCellMergingState, TableLookTypes } from '../../../../../../model/t
4
4
  import { TableWidthUnitType } from '../../../../../../model/tables/secondary-structures/table-units';
5
5
  import { Errors } from '@devexpress/utils/lib/errors';
6
6
  import { ListUtils } from '@devexpress/utils/lib/utils/list';
7
+ import { UnitConverter } from '@devexpress/utils/lib/class/unit-converter';
7
8
  import { RtfExportSR } from '../../../../translation-table/rtf-export-sr';
8
9
  import { RtfTableCellPropertiesMerger } from '../../../../utils/mergers/rtf-table-cell-properties-merger';
9
10
  import { RtfTablePropertiesMerger } from '../../../../utils/mergers/rtf-table-properties-merger';
@@ -14,10 +15,11 @@ import { RtfTableExporter } from '../rtf-table-exporter';
14
15
  import { RtfTablePropertiesExporter } from '../rtf-table-properties-exporter';
15
16
  import { RtfTableRowPropertiesExporter } from '../rtf-table-row-properties-exporter';
16
17
  export class RtfTableExporterStateBase {
17
- constructor(rtfExporter, table, nestingLevel) {
18
+ constructor(rtfExporter, table, grid, nestingLevel) {
18
19
  this.rtfExporter = rtfExporter;
19
20
  this._nestingLevel = nestingLevel;
20
21
  this.table = table;
22
+ this.grid = grid;
21
23
  this.tableRowPropertiesExporter = new RtfTableRowPropertiesExporter(rtfExporter.documentModel, rtfExporter.rtfExportHelper, rtfExporter.rtfBuilder);
22
24
  this.tableCellPropertiesExporter = new RtfTableCellPropertiesExporter(rtfExporter.documentModel, rtfExporter.rtfExportHelper, rtfExporter.rtfBuilder);
23
25
  this.tablePropertiesExporter = new RtfTablePropertiesExporter(rtfExporter.documentModel, rtfExporter.rtfExportHelper, rtfExporter.rtfBuilder);
@@ -92,7 +94,7 @@ export class RtfTableExporterStateBase {
92
94
  while (parentCell !== nestedTable.parentCell) {
93
95
  nestedTable = nestedTable.parentCell.parentRow.parentTable;
94
96
  }
95
- return RtfTableExporter.exportNestedTable(this.rtfExporter, nestedTable, this.nestingLevel + 1);
97
+ return RtfTableExporter.exportNestedTable(this.rtfExporter, nestedTable, this.grid, this.nestingLevel + 1);
96
98
  }
97
99
  exportRowProperties(row, rowIndex) {
98
100
  const rowLeft = this.calculateRowLeft(row, row.parentTable.getActualTableIndent(this.documentModel.defaultTableProperties));
@@ -100,20 +102,25 @@ export class RtfTableExporterStateBase {
100
102
  let cellRightVirtualColInd = row.gridBefore;
101
103
  for (const cell of row.cells) {
102
104
  cellRightVirtualColInd += cell.columnSpan;
103
- const cellRight = rowLeft + this.getCellWidth(cellRightVirtualColInd);
105
+ const cellWidth = this.getCellWidth(row.gridBefore, cellRightVirtualColInd);
106
+ const cellRight = UnitConverter.pixelsToTwips(rowLeft + cellWidth);
104
107
  this.exportCellProperties(cell, cellRight);
105
108
  }
106
109
  }
107
- getCellWidth(virtualColumnIndex) {
108
- if (virtualColumnIndex < 0)
110
+ getCellWidth(leftSideIndex, columnSpan) {
111
+ if (leftSideIndex < 0 || columnSpan < 0)
109
112
  throw new Error(Errors.InternalException);
110
- const minVirtualColumnWidth = 10;
111
- return virtualColumnIndex * minVirtualColumnWidth;
113
+ let result = 0;
114
+ for (let i = 0; i < columnSpan; i++)
115
+ result += Math.max(this.grid.columns.width[i + leftSideIndex], 1);
116
+ return result;
112
117
  }
113
118
  calculateRowLeft(row, indent) {
114
- const widthBefore = row.gridBefore > 0 ? this.getCellWidth(row.gridBefore) : 0;
119
+ var _a;
120
+ const widthBefore = row.gridBefore > 0 ? this.getCellWidth(0, row.gridBefore) : 0;
115
121
  const offset = this.getActualWidth(indent) + widthBefore;
116
- return offset - (this.rowLeftOffset != null ? this.rowLeftOffset : this.calculateRowLeftOffset(row));
122
+ const rowLeftOffset = (_a = this.rowLeftOffset) !== null && _a !== void 0 ? _a : this.calculateRowLeftOffset(row);
123
+ return offset - rowLeftOffset;
117
124
  }
118
125
  calculateRowLeftOffset(row) {
119
126
  const borderWidth = row.cells[0].properties.borders.left.width;
@@ -1,9 +1,10 @@
1
+ import { Grid } from '../../../../../../layout-formatter/table/grid-engine/grid';
1
2
  import { Table } from '../../../../../../model/tables/main-structures/table';
2
3
  import { TableRow } from '../../../../../../model/tables/main-structures/table-row';
3
4
  import { RtfContentExporter } from '../../rtf-content-exporter';
4
5
  import { RtfTableExporterStateBase } from './rtf-table-exporter-state-base';
5
6
  export declare class RtfTableExporterState extends RtfTableExporterStateBase {
6
- constructor(rtfExporter: RtfContentExporter, table: Table);
7
+ constructor(rtfExporter: RtfContentExporter, table: Table, grid: Grid);
7
8
  export(): void;
8
9
  protected writeParagraphEndMark(): void;
9
10
  protected exportRow(row: TableRow, rowIndex: number): void;
@@ -1,8 +1,8 @@
1
1
  import { RtfExportSR } from '../../../../translation-table/rtf-export-sr';
2
2
  import { RtfTableExporterStateBase } from './rtf-table-exporter-state-base';
3
3
  export class RtfTableExporterState extends RtfTableExporterStateBase {
4
- constructor(rtfExporter, table) {
5
- super(rtfExporter, table, 1);
4
+ constructor(rtfExporter, table, grid) {
5
+ super(rtfExporter, table, grid, 1);
6
6
  }
7
7
  export() {
8
8
  super.exportBase();
@@ -0,0 +1,6 @@
1
+ import { TableCellProperties } from '../../../../../model/tables/properties/table-cell-properties';
2
+ import { TableProperties } from '../../../../../model/tables/properties/table-properties';
3
+ import { TableRowProperties } from '../../../../../model/tables/properties/table-row-properties';
4
+ export declare function applyTablePropertiesUseValues(props: TableProperties, styleProps: TableProperties): void;
5
+ export declare function applyTableRowPropertiesUseValues(props: TableRowProperties, styleProps: TableRowProperties): void;
6
+ export declare function applyTableCellPropertiesUseValues(props: TableCellProperties, styleProps: TableCellProperties): void;
@@ -0,0 +1,90 @@
1
+ import { TableCellPropertiesMask } from '../../../../../model/tables/properties/table-cell-properties';
2
+ import { TablePropertiesMask } from '../../../../../model/tables/properties/table-properties';
3
+ import { TableRowPropertiesMask } from '../../../../../model/tables/properties/table-row-properties';
4
+ export function applyTablePropertiesUseValues(props, styleProps) {
5
+ props.mask = TablePropertiesMask.UseNone;
6
+ if (!props.borders.left.equals(styleProps.borders.left))
7
+ props.setUseValue(TablePropertiesMask.UseLeftBorder, true);
8
+ if (!props.borders.top.equals(styleProps.borders.top))
9
+ props.setUseValue(TablePropertiesMask.UseTopBorder, true);
10
+ if (!props.borders.right.equals(styleProps.borders.right))
11
+ props.setUseValue(TablePropertiesMask.UseRightBorder, true);
12
+ if (!props.borders.bottom.equals(styleProps.borders.bottom))
13
+ props.setUseValue(TablePropertiesMask.UseBottomBorder, true);
14
+ if (!props.borders.insideHorizontal.equals(styleProps.borders.insideHorizontal))
15
+ props.setUseValue(TablePropertiesMask.UseInsideHorizontalBorder, true);
16
+ if (!props.borders.insideVertical.equals(styleProps.borders.insideVertical))
17
+ props.setUseValue(TablePropertiesMask.UseInsideVerticalBorder, true);
18
+ if (!props.cellMargins.left.equals(styleProps.cellMargins.left))
19
+ props.setUseValue(TablePropertiesMask.UseLeftMargin, true);
20
+ if (!props.cellMargins.top.equals(styleProps.cellMargins.top))
21
+ props.setUseValue(TablePropertiesMask.UseTopMargin, true);
22
+ if (!props.cellMargins.right.equals(styleProps.cellMargins.right))
23
+ props.setUseValue(TablePropertiesMask.UseRightMargin, true);
24
+ if (!props.cellMargins.bottom.equals(styleProps.cellMargins.bottom))
25
+ props.setUseValue(TablePropertiesMask.UseBottomMargin, true);
26
+ if (!props.cellSpacing.equals(styleProps.cellSpacing))
27
+ props.setUseValue(TablePropertiesMask.UseCellSpacing, true);
28
+ if (!props.indent.equals(styleProps.indent))
29
+ props.setUseValue(TablePropertiesMask.UseTableIndent, true);
30
+ if (props.tableStyleColumnBandSize != styleProps.tableStyleColumnBandSize)
31
+ props.setUseValue(TablePropertiesMask.UseTableStyleColBandSize, true);
32
+ if (props.tableStyleRowBandSize != styleProps.tableStyleRowBandSize)
33
+ props.setUseValue(TablePropertiesMask.UseTableStyleRowBandSize, true);
34
+ if (props.avoidDoubleBorders != styleProps.avoidDoubleBorders)
35
+ props.setUseValue(TablePropertiesMask.UseAvoidDoubleBorders, true);
36
+ if (props.layoutType != styleProps.layoutType)
37
+ props.setUseValue(TablePropertiesMask.UseTableLayout, true);
38
+ if (!props.shadingInfo.equals(styleProps.shadingInfo))
39
+ props.setUseValue(TablePropertiesMask.UseShadingInfoIndex, true);
40
+ if (props.tableRowAlignment != styleProps.tableRowAlignment)
41
+ props.setUseValue(TablePropertiesMask.UseTableAlignment, true);
42
+ if (props.isTableOverlap != styleProps.isTableOverlap)
43
+ props.setUseValue(TablePropertiesMask.UseIsTableOverlap, true);
44
+ }
45
+ export function applyTableRowPropertiesUseValues(props, styleProps) {
46
+ props.mask = TableRowPropertiesMask.UseNone;
47
+ if (!props.cellSpacing.equals(styleProps.cellSpacing))
48
+ props.setUseValue(TableRowPropertiesMask.UseCellSpacing, true);
49
+ if (props.cantSplit != styleProps.cantSplit)
50
+ props.setUseValue(TableRowPropertiesMask.UseCantSplit, true);
51
+ if (props.hideCellMark != styleProps.hideCellMark)
52
+ props.setUseValue(TableRowPropertiesMask.UseHideCellMark, true);
53
+ if (props.tableRowAlignment != styleProps.tableRowAlignment)
54
+ props.setUseValue(TableRowPropertiesMask.UseTableRowAlignment, true);
55
+ if (props.header != styleProps.header)
56
+ props.setUseValue(TableRowPropertiesMask.UseHeader, true);
57
+ if (props.divId != styleProps.divId)
58
+ props.setUseValue(TableRowPropertiesMask.UseDivId, true);
59
+ }
60
+ export function applyTableCellPropertiesUseValues(props, styleProps) {
61
+ props.mask = TableCellPropertiesMask.UseNone;
62
+ if (!props.cellMargins.left.equals(styleProps.cellMargins.left))
63
+ props.setUseValue(TableCellPropertiesMask.UseLeftMargin, true);
64
+ if (!props.cellMargins.top.equals(styleProps.cellMargins.top))
65
+ props.setUseValue(TableCellPropertiesMask.UseTopMargin, true);
66
+ if (!props.cellMargins.bottom.equals(styleProps.cellMargins.bottom))
67
+ props.setUseValue(TableCellPropertiesMask.UseBottomMargin, true);
68
+ if (!props.cellMargins.right.equals(styleProps.cellMargins.right))
69
+ props.setUseValue(TableCellPropertiesMask.UseRightMargin, true);
70
+ if (!props.borders.left.equals(styleProps.borders.left))
71
+ props.setUseValue(TableCellPropertiesMask.UseLeftBorder, true);
72
+ if (!props.borders.top.equals(styleProps.borders.top))
73
+ props.setUseValue(TableCellPropertiesMask.UseTopBorder, true);
74
+ if (!props.borders.bottom.equals(styleProps.borders.bottom))
75
+ props.setUseValue(TableCellPropertiesMask.UseBottomBorder, true);
76
+ if (!props.borders.right.equals(styleProps.borders.right))
77
+ props.setUseValue(TableCellPropertiesMask.UseRightBorder, true);
78
+ if (props.hideCellMark != styleProps.hideCellMark)
79
+ props.setUseValue(TableCellPropertiesMask.UseHideCellMark, true);
80
+ if (props.noWrap != styleProps.noWrap)
81
+ props.setUseValue(TableCellPropertiesMask.UseNoWrap, true);
82
+ if (props.fitText != styleProps.fitText)
83
+ props.setUseValue(TableCellPropertiesMask.UseFitText, true);
84
+ if (props.textDirection != styleProps.textDirection)
85
+ props.setUseValue(TableCellPropertiesMask.UseTextDirection, true);
86
+ if (props.verticalAlignment != styleProps.verticalAlignment)
87
+ props.setUseValue(TableCellPropertiesMask.UseVerticalAlignment, true);
88
+ if (!props.shadingInfo.equals(styleProps.shadingInfo))
89
+ props.setUseValue(TableCellPropertiesMask.UseShadingInfoIndex, true);
90
+ }
@@ -7,6 +7,7 @@ import { ListUtils } from '@devexpress/utils/lib/utils/list';
7
7
  import { NumberMapUtils } from '@devexpress/utils/lib/utils/map/number';
8
8
  import { RtfTableColumnsCalculator } from './rtf-table-columns-calculator';
9
9
  import { FixedInterval } from '@devexpress/utils/lib/intervals/fixed';
10
+ import { applyTableCellPropertiesUseValues, applyTablePropertiesUseValues, applyTableRowPropertiesUseValues } from './normalization/apply-use-values';
10
11
  export class RtfTableConverter {
11
12
  constructor(tableReader) {
12
13
  this.rtfCellMap = {};
@@ -54,8 +55,9 @@ export class RtfTableConverter {
54
55
  tablePreferredWidth.type = TableWidthUnitType.Auto;
55
56
  tablePreferredWidth.value = 0;
56
57
  }
57
- if (!table.properties.coreProperties.getUseValue(TablePropertiesMask.UseRightMargin) &&
58
- !table.properties.coreProperties.getUseValue(TablePropertiesMask.UseLeftMargin) && table.properties.useHalfSpace) {
58
+ const useMargins = table.properties.coreProperties.getUseValue(TablePropertiesMask.UseLeftMargin) &&
59
+ table.properties.coreProperties.getUseValue(TablePropertiesMask.UseRightMargin);
60
+ if (!useMargins && table.properties.useHalfSpace) {
59
61
  const margin = table.properties.halfSpace;
60
62
  table.properties.coreProperties.cellMargins.left.type = TableWidthUnitType.ModelUnits;
61
63
  table.properties.coreProperties.cellMargins.left.value = margin;
@@ -99,6 +101,7 @@ export class RtfTableConverter {
99
101
  return 0;
100
102
  }
101
103
  convertTableCore(table, rtfTable) {
104
+ applyTablePropertiesUseValues(table.properties, table.style.baseConditionalStyle.tableProperties);
102
105
  const tableGrid = this.calculateTableGrid(rtfTable);
103
106
  const rows = table.rows;
104
107
  const tableLayoutType = table.properties.layoutType;
@@ -201,6 +204,7 @@ export class RtfTableConverter {
201
204
  return result;
202
205
  }
203
206
  convertRow(row, rtfRow) {
207
+ applyTableRowPropertiesUseValues(row.properties, row.parentTable.style.baseConditionalStyle.tableRowProperties);
204
208
  const rtfCells = rtfRow.cells;
205
209
  for (let i = 0; i < rtfCells.length; i++)
206
210
  this.convertCell(row, rtfCells[i]);
@@ -209,6 +213,7 @@ export class RtfTableConverter {
209
213
  if (rtfCell.properties.horizontalMerging == TableCellMergingState.Restart)
210
214
  this.mergeCells(rtfCell);
211
215
  const cell = rtfCell.createCell(row, this.subDocument);
216
+ applyTableCellPropertiesUseValues(cell.properties, cell.parentRow.parentTable.style.baseConditionalStyle.tableCellProperties);
212
217
  row.cells.push(cell);
213
218
  this.rtfCellMap[rtfCell.idForParentCellMap] = cell;
214
219
  }
@@ -1,6 +1,5 @@
1
1
  import { FixedInterval } from "@devexpress/utils/lib/intervals/fixed";
2
- import { RichOptions } from "../../model/options/rich-options";
3
2
  import { SubDocument } from "../../model/sub-document";
4
3
  import { IProcessor } from "../../processor";
5
- export declare function getRtfFromSubDocumentPublic(richOptions: RichOptions, subDocument: SubDocument, coreInterval: FixedInterval): string;
4
+ export declare function getRtfFromSubDocumentPublic(processor: IProcessor, subDocument: SubDocument, coreInterval: FixedInterval): string;
6
5
  export declare function insertRtfInSubDocumentPublic(processor: IProcessor, subDocument: SubDocument, position: number, rtf: string, callback: (interval: FixedInterval, isRtfValid: boolean) => void): void;
@@ -7,10 +7,11 @@ import { RtfDocumentExporterOptions } from "./export/rtf-document-exporter-optio
7
7
  import { RtfImporterOptions } from "./import/importer-options";
8
8
  import { RtfImporter } from "./import/rtf-importer";
9
9
  import { getAfterInsertCallback, getAfterInsertReject } from "../callback-helpers";
10
- export function getRtfFromSubDocumentPublic(richOptions, subDocument, coreInterval) {
10
+ export function getRtfFromSubDocumentPublic(processor, subDocument, coreInterval) {
11
11
  const rangeCopy = RangeCopy.create(new SubDocumentIntervals(subDocument, [coreInterval]));
12
- const newModelManager = new ClientModelManager(rangeCopy.model, richOptions, new EmptyBatchUpdatableObject());
13
- return new RtfExporter(newModelManager.modelManipulator, new RtfDocumentExporterOptions()).exportAsString();
12
+ const newModelManager = new ClientModelManager(rangeCopy.model, processor.modelManager.richOptions, new EmptyBatchUpdatableObject());
13
+ const exportModelOptions = processor.getExportModelOptions({ modelManager: newModelManager });
14
+ return new RtfExporter(exportModelOptions, new RtfDocumentExporterOptions()).exportAsString();
14
15
  }
15
16
  export function insertRtfInSubDocumentPublic(processor, subDocument, position, rtf, callback) {
16
17
  const options = new RtfImporterOptions(() => { });