UNPKG

devexpress-richedit

Version:

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

27 lines (26 loc) 1.87 kB
import { InsertTextManipulatorParams } from '../../../common/model/manipulators/text-manipulator/insert-text-manipulator-params'; import { RunType } from '../../../common/model/runs/run-type'; import { SubDocumentPosition } from '../../../common/model/sub-document'; import { InputPositionBase } from '../../../common/selection/input-position-base'; import { SelectionIntervalsInfo } from '../../../common/selection/selection-intervals-info'; import { IntervalAlgorithms } from '@devexpress/utils/lib/intervals/algorithms'; import { BoundaryInterval } from '@devexpress/utils/lib/intervals/boundary'; import { FixedInterval } from '@devexpress/utils/lib/intervals/fixed'; import { ListUtils } from '@devexpress/utils/lib/utils/list'; export function insertTextThroughApi(position, text, subDocument, processor, options) { if (!text.length) return new FixedInterval(position, 0); const inputPos = options?.inputPosition ?? new InputPositionBase().setIntervals(SelectionIntervalsInfo.fromPosition(subDocument, position)); const wrapIntoBeginUpdate = options?.wrapIntoBeginUpdate ?? true; if (wrapIntoBeginUpdate) processor.beginUpdate(); processor.modelManager.history.beginTransaction(); const subDocPos = new SubDocumentPosition(subDocument, position); const insertTextParams = new InsertTextManipulatorParams(subDocPos, inputPos.charPropsBundle, RunType.TextRun, text); const resultIntervals = processor.modelManager.modelManipulator.text.insertTextWithParagraphs(insertTextParams, inputPos); processor.modelManager.history.endTransaction(); if (wrapIntoBeginUpdate) processor.endUpdate(); const mergedIntervals = IntervalAlgorithms.getMergedIntervals(resultIntervals, true); return new BoundaryInterval(mergedIntervals[0].start, ListUtils.last(mergedIntervals).end); }