UNPKG

devexpress-richedit

Version:

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

79 lines (78 loc) 2.99 kB
import { BoundaryInterval } from '@devexpress/utils/lib/intervals/boundary'; import { ConstInterval } from '@devexpress/utils/lib/intervals/const'; import { Comparers } from '@devexpress/utils/lib/utils/comparers'; import { LinkedInterval } from './position/linked-interval'; export class BookmarkBase extends ConstInterval { get start() { return this._interval.start; } get length() { return this._interval.length; } get end() { return this._interval.end; } get interval() { return this._interval.getFixedInterval(); } constructor(positionManager, interval) { super(); this._interval = new LinkedInterval(positionManager, interval); } equals(obj) { return obj && this._interval.equals(obj._interval); } destructor(positionManager) { this._interval.destructor(positionManager); } } export class BookmarkNameValidator { static isValidName(name, allowHiddenBookmarks) { return name && name.length && !/\d/.test(name[0]) && (allowHiddenBookmarks || name[0] != "_") && !BookmarkNameValidator.prohibitedSymbolsForName.test(name); } } BookmarkNameValidator.prohibitedSymbolsForName = /.*[\`\~\!\@\#\$\%\^\&\*\(\)\+\{\}\|\:\"\<\>\?\-\=\[\]\.\,\;\'\/\\ ].*/; export class Bookmark extends BookmarkBase { constructor(positionManager, interval, name) { super(positionManager, interval); this.name = ""; this.name = name; } static isValidName(name, allowHiddenBookmarks) { return BookmarkNameValidator.isValidName(name, allowHiddenBookmarks); } isHidden() { return this.name.length > 0 && this.name[0] == "_"; } isToc() { return this.name.toUpperCase().indexOf("_TOC") == 0; } equals(obj) { return super.equals(obj) && this.name == obj.name; } get constBookmark() { return new ConstBookmark(this, this.name); } clone(subDocument) { return new Bookmark(subDocument.positionManager, this.interval, this.name); } } export class ConstBookmark extends ConstInterval { get start() { return this.interval.start; } get length() { return this.interval.length; } get end() { return this.interval.end; } constructor(interval, name) { super(); this.interval = new BoundaryInterval(interval.start, interval.end); this.name = name; } equals(obj) { return obj && this.name == obj.name && this.interval.equals(obj.interval); } createBookmark(positionManager) { return new Bookmark(positionManager, this.interval, this.name); } static comparer(a, b) { const diff = a.start - b.start; return diff == 0 ? Comparers.string(a.name, b.name) : diff; } } export class BookmarkAndSubDocument { constructor(bookmark, subDocument) { this.bookmark = bookmark; this.subDocument = subDocument; } }