devexpress-richedit
Version: 
DevExpress Rich Text Editor is an advanced word-processing tool designed for working with rich text documents.
60 lines (59 loc) • 2.17 kB
JavaScript
import { FixedInterval } from '@devexpress/utils/lib/intervals/fixed';
export class RunIterator {
    constructor(runs, chunks, sections, indexForChunks, indexForSections) {
        this.currentRun = null;
        this.currentChunk = null;
        this.currentSection = null;
        this.runs = [];
        this.chunks = [];
        this.sections = [];
        this.currentRunIndex = 0;
        this.currentChunkIndex = 0;
        this.currentSectionIndex = 0;
        this.indexForChunks = [];
        this.indexForSections = [];
        this.runs = runs;
        this.chunks = chunks;
        this.sections = sections;
        this.indexForChunks = indexForChunks;
        this.indexForSections = indexForSections;
    }
    moveNext() {
        this.currentRun = this.runs[this.currentRunIndex];
        if (this.currentRun) {
            this.currentChunk = this.chunks[this.currentChunkIndex];
            this.currentSection = this.sections[this.currentSectionIndex];
            if (this.currentRunIndex == this.indexForChunks[this.currentChunkIndex])
                this.currentChunkIndex++;
            if (this.currentRunIndex == this.indexForSections[this.currentSectionIndex])
                this.currentSectionIndex++;
            this.currentRunIndex++;
            return true;
        }
        else {
            this.currentChunk = undefined;
            this.currentSection = undefined;
            return false;
        }
    }
    currentInterval() {
        if (this.currentRun)
            return new FixedInterval(this.currentChunk.startLogPosition.value + this.currentRun.startOffset, this.currentRun.getLength());
        else
            return new FixedInterval(this.chunks[0].startLogPosition.value + this.runs[0].startOffset, this.runs[0].getLength());
    }
    getFirstRun() {
        return this.runs[0];
    }
    getLastRun() {
        return this.runs[this.runs.length - 1];
    }
    getRunsCount() {
        return this.runs.length;
    }
    reset() {
        this.currentRunIndex = 0;
        this.currentChunkIndex = 0;
        this.currentSectionIndex = 0;
    }
}