UNPKG

devexpress-richedit

Version:

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

117 lines (116 loc) 9.11 kB
import { ApiParametersChecker } from './api-utils/parameter-checker'; import { CharacterProperties } from '../../common/model/character/character-properties'; import { StrikeoutType, UnderlineType } from '../../common/model/character/enums'; import { ColorModelInfo } from '../../common/model/color/color-model-info'; import { ShadingInfo } from '../../common/model/shadings/shading-info'; import { InputPositionBase } from '../../common/selection/input-position-base'; import { SelectionIntervalsInfo } from '../../common/selection/selection-intervals-info'; import { CharacterPropertiesApplier } from '../../common/model/character/character-properties-helper'; import { ApiUtils } from './api-utils/api-utils'; import { ModelParametersChecker } from './api-utils/model-parameter-checker'; export var CharacterPropertiesScriptApi; (function (CharacterPropertiesScriptApi) { CharacterPropertiesScriptApi[CharacterPropertiesScriptApi["Normal"] = 0] = "Normal"; CharacterPropertiesScriptApi[CharacterPropertiesScriptApi["Subscript"] = 1] = "Subscript"; CharacterPropertiesScriptApi[CharacterPropertiesScriptApi["Superscript"] = 2] = "Superscript"; })(CharacterPropertiesScriptApi || (CharacterPropertiesScriptApi = {})); export class CharacterPropertiesApi { } export function convertToCharacterPropertiesApi(properties, colorProvider) { const value = new CharacterPropertiesApi(); value.allCaps = properties.allCaps; value.smallCaps = properties.smallCaps; value.foreColor = properties.textColor === undefined ? undefined : ApiUtils.internalColorToApiColor(properties.textColor.toRgb(colorProvider)); value.fontName = properties.fontInfo ? properties.fontInfo.name : undefined; value.size = properties.fontSize; value.strikeout = properties.fontStrikeoutType === undefined ? undefined : properties.fontStrikeoutType !== StrikeoutType.None; value.bold = properties.fontBold; value.italic = properties.fontItalic; value.underline = properties.fontUnderlineType === undefined ? undefined : properties.fontUnderlineType !== UnderlineType.None; value.underlineColor = properties.underlineColor === undefined ? undefined : ApiUtils.internalColorToApiColor(properties.underlineColor.toRgb(colorProvider)); value.hidden = properties.hidden; value.script = properties.script; value.underlineWordsOnly = properties.underlineWordsOnly; value.backColor = properties.shadingInfo === undefined ? undefined : ApiUtils.internalColorToApiColor(properties.shadingInfo.getActualColor(colorProvider)); value.highlightColor = properties.highlightColor !== undefined ? ApiUtils.internalColorToApiColor(properties.highlightColor.toRgb(colorProvider)) : undefined; return value; } export function convertFromCharacterPropertiesApi(properties, fontInfoCache, parameterIndex, setRestAsUndefined, propsCoreTemplate) { var _a, _b, _c, _d, _e, _f, _g, _h, _j; properties = ApiParametersChecker.check(properties, parameterIndex, false, [ ApiParametersChecker.objectDescriptor('properties', 'CharacterProperties', (val) => val) ]); if (!propsCoreTemplate) propsCoreTemplate = new CharacterProperties(); propsCoreTemplate.allCaps = (_a = ApiParametersChecker.check(properties.allCaps, parameterIndex, true, [ ApiParametersChecker.booleanDescriptor('properties.allCaps', (val) => val) ])) !== null && _a !== void 0 ? _a : propsCoreTemplate.allCaps; propsCoreTemplate.smallCaps = (_b = ApiParametersChecker.check(properties.smallCaps, parameterIndex, true, [ ApiParametersChecker.booleanDescriptor('properties.smallCaps', (val) => val) ])) !== null && _b !== void 0 ? _b : propsCoreTemplate.smallCaps; propsCoreTemplate.fontBold = (_c = ApiParametersChecker.check(properties.bold, parameterIndex, true, [ ApiParametersChecker.booleanDescriptor('properties.bold', (val) => val) ])) !== null && _c !== void 0 ? _c : propsCoreTemplate.fontBold; const textColor = ApiParametersChecker.check(properties.foreColor, parameterIndex, true, ModelParametersChecker.colorDescriptors('properties.foreColor')); propsCoreTemplate.textColor = textColor === undefined ? propsCoreTemplate.textColor : ColorModelInfo.makeByColor(textColor); propsCoreTemplate.fontItalic = (_d = ApiParametersChecker.check(properties.italic, parameterIndex, true, [ ApiParametersChecker.booleanDescriptor('properties.italic', (val) => val) ])) !== null && _d !== void 0 ? _d : propsCoreTemplate.fontItalic; propsCoreTemplate.fontInfo = (_e = ApiParametersChecker.check(properties.fontName, parameterIndex, true, [ ApiParametersChecker.stringDescriptor('properties.fontName', (val) => { const fontInfo = fontInfoCache.getItemByName(val); if (!fontInfo) throw Error('Unknown font name'); return fontInfo; }, false) ])) !== null && _e !== void 0 ? _e : propsCoreTemplate.fontInfo; propsCoreTemplate.fontSize = (_f = ApiParametersChecker.check(properties.size, parameterIndex, true, [ ApiParametersChecker.numberDescriptor('properties.size', (val) => val, 0, 601) ])) !== null && _f !== void 0 ? _f : propsCoreTemplate.fontSize; propsCoreTemplate.hidden = (_g = ApiParametersChecker.check(properties.hidden, parameterIndex, true, [ ApiParametersChecker.booleanDescriptor('properties.hidden', (val) => val) ])) !== null && _g !== void 0 ? _g : propsCoreTemplate.hidden; const shadigInfoColor = ApiParametersChecker.check(properties.backColor, parameterIndex, true, ModelParametersChecker.colorDescriptors('properties.backColor')); propsCoreTemplate.shadingInfo = shadigInfoColor === undefined ? propsCoreTemplate.shadingInfo : ShadingInfo.createByColor(ColorModelInfo.makeByColor(shadigInfoColor)); propsCoreTemplate.script = (_h = ApiParametersChecker.check(properties.script, parameterIndex, true, [ ApiParametersChecker.enumDescriptor('properties.script', (val) => val, CharacterPropertiesScriptApi, 'CharacterPropertiesScript') ])) !== null && _h !== void 0 ? _h : propsCoreTemplate.script; const underlineColor = ApiParametersChecker.check(properties.underlineColor, parameterIndex, true, ModelParametersChecker.colorDescriptors('properties.underlineColor')); propsCoreTemplate.underlineColor = underlineColor === undefined ? propsCoreTemplate.underlineColor : ColorModelInfo.makeByColor(underlineColor); propsCoreTemplate.underlineWordsOnly = (_j = ApiParametersChecker.check(properties.underlineWordsOnly, parameterIndex, true, [ ApiParametersChecker.booleanDescriptor('properties.underlineWordsOnly', (val) => val) ])) !== null && _j !== void 0 ? _j : propsCoreTemplate.underlineWordsOnly; const strikeout = ApiParametersChecker.check(properties.strikeout, parameterIndex, true, [ ApiParametersChecker.booleanDescriptor('properties.strikeout', (val) => val) ]); propsCoreTemplate.fontStrikeoutType = strikeout === true ? StrikeoutType.Single : (strikeout === false ? StrikeoutType.None : propsCoreTemplate.fontStrikeoutType); const underline = ApiParametersChecker.check(properties.underline, parameterIndex, true, [ ApiParametersChecker.booleanDescriptor('properties.underline', (val) => val) ]); propsCoreTemplate.fontUnderlineType = underline === true ? UnderlineType.Single : (underline === false ? UnderlineType.None : propsCoreTemplate.fontUnderlineType); const highlightColor = ApiParametersChecker.check(properties.highlightColor, parameterIndex, true, ModelParametersChecker.colorDescriptors('properties.highlightColor')); propsCoreTemplate.highlightColor = highlightColor === undefined ? propsCoreTemplate.highlightColor : ColorModelInfo.makeByColor(highlightColor); if (setRestAsUndefined) { propsCoreTemplate.langInfo = undefined; propsCoreTemplate.strikeoutColor = undefined; propsCoreTemplate.noProof = undefined; propsCoreTemplate.compositeFontInfo = undefined; } return propsCoreTemplate; } export function getCharacterProperties(processor, subDocument, coreInterval) { const inputPos = new InputPositionBase().setIntervals(SelectionIntervalsInfo.fromInterval(subDocument, coreInterval)); return convertToCharacterPropertiesApi(inputPos.getMergedCharacterPropertiesRaw(), processor.modelManager.model.colorProvider); } export function setCharacterProperties(processor, subDocument, coreInterval, characterProperties) { const propertiesCore = convertFromCharacterPropertiesApi(characterProperties, processor.modelManager.model.cache.fontInfoCache, 2, true, {}); const inputPos = new InputPositionBase().setIntervals(new SelectionIntervalsInfo(subDocument, [coreInterval])); processor.beginUpdate(); new CharacterPropertiesApplier(processor.modelManager, inputPos, propertiesCore, subDocument, [coreInterval]).apply(); processor.endUpdate(); }