UNPKG

devexpress-richedit

Version:

DevExpress Rich Text Editor is an advanced word-processing tool designed for working with rich text documents.

155 lines (154 loc) 10.3 kB
import { CharacterPropertiesMask } from '../../../../../model/character/enums'; import { CharacterPropertiesMerger } from '../../../../../model/properties-merger/character-properties-merger'; import { ParagraphPropertiesMerger } from '../../../../../model/properties-merger/paragraph-properties-merger'; import { ConditionalTableStyleFormatting } from '../../../../../model/tables/secondary-structures/table-base-structures'; import { TableStyle } from '../../../../../model/tables/styles/table-style'; import { RtfTableCellPropertiesMerger } from '../../../utils/mergers/rtf-table-cell-properties-merger'; import { RtfTablePropertiesMerger } from '../../../utils/mergers/rtf-table-properties-merger'; import { RtfTableRowPropertiesMerger } from '../../../utils/mergers/rtf-table-row-properties-merger'; import { DestinationSubDocument } from '../sub-document/destination-sub-document'; import { DestinationType } from '../utils/destination-type'; export class TableStyleDestination extends DestinationSubDocument { get destinationType() { return DestinationType.TableStyleDestination; } get controlCharHT() { return null; } static onStyleQFormatKeyword(importer, _parameterValue, _hasParameter) { TableStyleDestination.getThis(importer).qFormat = true; } static onParentStyleIndex(importer, parameterValue, _hasParameter) { importer.importers.style.table.rtfParentStyleIndex = parameterValue; } static onConditionalStyleFirstRow(importer, _parameterValue, _hasParameter) { TableStyleDestination.getThis(importer).conditionalTableStyleFormattingType = ConditionalTableStyleFormatting.FirstRow; } static onConditionalStyleLastRow(importer, _parameterValue, _hasParameter) { TableStyleDestination.getThis(importer).conditionalTableStyleFormattingType = ConditionalTableStyleFormatting.LastRow; } static onConditionalStyleFirstColumn(importer, _parameterValue, _hasParameter) { TableStyleDestination.getThis(importer).conditionalTableStyleFormattingType = ConditionalTableStyleFormatting.FirstColumn; } static onConditionalStyleLastColumn(importer, _parameterValue, _hasParameter) { TableStyleDestination.getThis(importer).conditionalTableStyleFormattingType = ConditionalTableStyleFormatting.LastColumn; } static onConditionalStyleOddRowBanding(importer, _parameterValue, _hasParameter) { TableStyleDestination.getThis(importer).conditionalTableStyleFormattingType = ConditionalTableStyleFormatting.OddRowBanding; } static onConditionalStyleEvenRowBanding(importer, _parameterValue, _hasParameter) { TableStyleDestination.getThis(importer).conditionalTableStyleFormattingType = ConditionalTableStyleFormatting.EvenRowBanding; } static onConditionalStyleOddColumnBanding(importer, _parameterValue, _hasParameter) { TableStyleDestination.getThis(importer).conditionalTableStyleFormattingType = ConditionalTableStyleFormatting.OddColumnBanding; } static onConditionalStyleEvenColumnBanding(importer, _parameterValue, _hasParameter) { TableStyleDestination.getThis(importer).conditionalTableStyleFormattingType = ConditionalTableStyleFormatting.EvenColumnBanding; } static onConditionalStyleTopLeftCell(importer, _parameterValue, _hasParameter) { TableStyleDestination.getThis(importer).conditionalTableStyleFormattingType = ConditionalTableStyleFormatting.TopLeftCell; } static onConditionalStyleTopRightCell(importer, _parameterValue, _hasParameter) { TableStyleDestination.getThis(importer).conditionalTableStyleFormattingType = ConditionalTableStyleFormatting.TopRightCell; } static onConditionalStyleBottomLeftCell(importer, _parameterValue, _hasParameter) { TableStyleDestination.getThis(importer).conditionalTableStyleFormattingType = ConditionalTableStyleFormatting.BottomLeftCell; } static onConditionalStyleBottomRightCell(importer, _parameterValue, _hasParameter) { TableStyleDestination.getThis(importer).conditionalTableStyleFormattingType = ConditionalTableStyleFormatting.BottomRightCell; } static getThis(rtfImporter) { return rtfImporter.destination; } get canAppendText() { return false; } get rtfStyleIndex() { return this.importer.importers.style.table.rtfStyleIndex; } set rtfStyleIndex(value) { this.importer.importers.style.table.rtfStyleIndex = value; } get rtfParentStyleIndex() { return this.importer.importers.style.table.rtfParentStyleIndex; } constructor(importer, styleIndex) { super(importer, importer.subDocument); this.conditionalTableStyleFormattingType = ConditionalTableStyleFormatting.WholeTable; this.styleName = ''; this.rtfStyleIndex = styleIndex; this.importer.importers.character.characterFormatting.coreProperties.setUseValue(CharacterPropertiesMask.UseAll, false); } beforePopRtfState() { const name = this.styleName.trim(); let style = null; const isConditionalStyle = this.conditionalTableStyleFormattingType != ConditionalTableStyleFormatting.WholeTable; let realConditionalStyle; if (isConditionalStyle) { style = this.addConditionalStyle(); realConditionalStyle = style; } else { this.importer.importers.character.characterFormatting.coreProperties.setUseValue(CharacterPropertiesMask.UseAll, true); const styleModelIndex = this.importer.importers.style.table.mapRtfIndexToModelIndex[this.rtfStyleIndex]; if (styleModelIndex == undefined) style = this.importer.importers.style.table.getOrCreateStyleByName(name); else style = this.documentModel.tableStyles[styleModelIndex]; realConditionalStyle = style.baseConditionalStyle; } if (style == null) return; const tableStyle = style; const conditionalStyle = style; if (tableStyle != null) tableStyle.primary = this.qFormat; if (name != TableStyle.DEFAULT_STYLENAME) { var parentTableStyle; if (!isConditionalStyle) { parentTableStyle = this.importer.importers.style.table.parentStyle; } else { parentTableStyle = style.parent; if (parentTableStyle == null) parentTableStyle = this.importer.documentModel.tableStyles[0]; } let parentParagraphProperties; if (isConditionalStyle) { conditionalStyle.maskedCharacterProperties.copyFrom(this.importer.importers.character.characterFormatting.coreProperties); parentParagraphProperties = conditionalStyle.maskedParagraphProperties; } else { const characterPropertiesMerger = new CharacterPropertiesMerger(); characterPropertiesMerger.mergeCharacterProperties(tableStyle.baseConditionalStyle.maskedCharacterProperties); characterPropertiesMerger.mergeMergedCharacterProperties(parentTableStyle.baseConditionalStyle.maskedCharacterProperties); tableStyle.baseConditionalStyle.maskedCharacterProperties = characterPropertiesMerger.innerProperties; const parentParagraphPropertiesMerger = new ParagraphPropertiesMerger(); parentParagraphPropertiesMerger.mergeMaskedParagraphProperties(tableStyle.baseConditionalStyle.maskedParagraphProperties); parentParagraphPropertiesMerger.mergeMaskedParagraphProperties(parentTableStyle.baseConditionalStyle.maskedParagraphProperties); parentParagraphProperties = parentParagraphPropertiesMerger.innerProperties; } const formattingInfo = this.importer.importers.paragraph.paragraphFormatting; const paragraphPropertiesMerger = new ParagraphPropertiesMerger(); paragraphPropertiesMerger.mergeMaskedParagraphProperties(formattingInfo.getCoreProperties()); paragraphPropertiesMerger.mergeMaskedParagraphProperties(parentParagraphProperties); realConditionalStyle.maskedParagraphProperties = paragraphPropertiesMerger.innerProperties; realConditionalStyle.tableProperties = this.importer.importers.table.tableReader.tableProperties.coreProperties; realConditionalStyle.tableProperties = new RtfTablePropertiesMerger(this.importer.documentModel) .getStyleMergedProperties(realConditionalStyle, tableStyle, this.conditionalTableStyleFormattingType); realConditionalStyle.tableRowProperties = this.importer.importers.table.tableReader.rowProperties.coreProperties; realConditionalStyle.tableRowProperties = new RtfTableRowPropertiesMerger(this.importer.documentModel) .getStyleMergedProperties(realConditionalStyle, tableStyle, this.conditionalTableStyleFormattingType); realConditionalStyle.tableCellProperties = this.importer.importers.table.tableReader.cellProperties.coreProperties; realConditionalStyle.tableCellProperties = new RtfTableCellPropertiesMerger(this.importer.documentModel) .getStyleMergedProperties(realConditionalStyle, tableStyle, this.conditionalTableStyleFormattingType); } } addConditionalStyle() { if (this.importer.importers.style.table.mapRtfIndexToModelIndex[this.rtfStyleIndex] == undefined) return null; const documentModel = this.importer.documentModel; const mainStyle = documentModel.tableStyles[this.importer.importers.style.table.getModelIndex(this.rtfStyleIndex)]; const tableConditionalStyle = mainStyle.conditionalStyles[this.conditionalTableStyleFormattingType]; return tableConditionalStyle; } createClone() { return new TableStyleDestination(this.importer, this.rtfStyleIndex); } processCharCore(ch) { if (ch != ';') this.styleName += ch; } finalizePieceTableCreation() { } }