diff options
Diffstat (limited to 'ext/js/general')
| -rw-r--r-- | ext/js/general/regex-util.js | 12 | ||||
| -rw-r--r-- | ext/js/general/text-source-map.js | 153 | 
2 files changed, 1 insertions, 164 deletions
| diff --git a/ext/js/general/regex-util.js b/ext/js/general/regex-util.js index e0982154..c633ec06 100644 --- a/ext/js/general/regex-util.js +++ b/ext/js/general/regex-util.js @@ -23,13 +23,12 @@ const matchReplacementPattern = /\$(?:\$|&|`|'|(\d\d?)|<([^>]*)>)/g;   * Applies string.replace using a regular expression and replacement string as arguments.   * A source map of the changes is also maintained.   * @param {string} text A string of the text to replace. - * @param {import('./text-source-map.js').TextSourceMap} sourceMap An instance of `TextSourceMap` which corresponds to `text`.   * @param {RegExp} pattern A regular expression to use as the replacement.   * @param {string} replacement A replacement string that follows the format of the standard   *   JavaScript regular expression replacement string.   * @returns {string} A new string with the pattern replacements applied and the source map updated.   */ -export function applyTextReplacement(text, sourceMap, pattern, replacement) { +export function applyTextReplacement(text, pattern, replacement) {      const isGlobal = pattern.global;      if (isGlobal) { pattern.lastIndex = 0; }      for (let loop = true; loop; loop = isGlobal) { @@ -44,15 +43,6 @@ export function applyTextReplacement(text, sourceMap, pattern, replacement) {          text = `${text.substring(0, index)}${actualReplacement}${text.substring(index + matchText.length)}`;          pattern.lastIndex += delta; - -        if (actualReplacementLength > 0) { -            /** @type {number[]} */ -            const zeroes = new Array(actualReplacementLength).fill(0); -            sourceMap.insert(index, ...zeroes); -            sourceMap.combine(index - 1 + actualReplacementLength, matchText.length); -        } else { -            sourceMap.combine(index, matchText.length); -        }      }      return text;  } diff --git a/ext/js/general/text-source-map.js b/ext/js/general/text-source-map.js deleted file mode 100644 index 527c232b..00000000 --- a/ext/js/general/text-source-map.js +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright (C) 2023-2024  Yomitan Authors - * Copyright (C) 2020-2022  Yomichan Authors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program.  If not, see <https://www.gnu.org/licenses/>. - */ - -export class TextSourceMap { -    /** -     * @param {string} source -     * @param {number[]|null} [mapping=null] -     */ -    constructor(source, mapping = null) { -        /** @type {string} */ -        this._source = source; -        /** @type {?number[]} */ -        this._mapping = (mapping !== null ? TextSourceMap.normalizeMapping(mapping) : null); -    } - -    /** @type {string} */ -    get source() { -        return this._source; -    } - -    /** -     * @param {unknown} other -     * @returns {boolean} -     */ -    equals(other) { -        if (this === other) { -            return true; -        } - -        const source = this._source; -        if (!(other instanceof TextSourceMap && source === other.source)) { -            return false; -        } - -        let mapping = this._mapping; -        let otherMapping = other.getMappingCopy(); -        if (mapping === null) { -            if (otherMapping === null) { -                return true; -            } -            mapping = TextSourceMap.createMapping(source); -        } else if (otherMapping === null) { -            otherMapping = TextSourceMap.createMapping(source); -        } - -        const mappingLength = mapping.length; -        if (mappingLength !== otherMapping.length) { -            return false; -        } - -        for (let i = 0; i < mappingLength; ++i) { -            if (mapping[i] !== otherMapping[i]) { -                return false; -            } -        } - -        return true; -    } - -    /** -     * @param {number} finalLength -     * @returns {number} -     */ -    getSourceLength(finalLength) { -        const mapping = this._mapping; -        if (mapping === null) { -            return finalLength; -        } - -        let sourceLength = 0; -        for (let i = 0; i < finalLength; ++i) { -            sourceLength += mapping[i]; -        } -        return sourceLength; -    } - -    /** -     * @param {number} index -     * @param {number} count -     */ -    combine(index, count) { -        if (count <= 0) { return; } - -        if (this._mapping === null) { -            this._mapping = TextSourceMap.createMapping(this._source); -        } - -        let sum = this._mapping[index]; -        const parts = this._mapping.splice(index + 1, count); -        for (const part of parts) { -            sum += part; -        } -        this._mapping[index] = sum; -    } - -    /** -     * @param {number} index -     * @param {number[]} items -     */ -    insert(index, ...items) { -        if (this._mapping === null) { -            this._mapping = TextSourceMap.createMapping(this._source); -        } - -        this._mapping.splice(index, 0, ...items); -    } - -    /** -     * @returns {?number[]} -     */ -    getMappingCopy() { -        return this._mapping !== null ? [...this._mapping] : null; -    } - -    /** -     * @param {string} text -     * @returns {number[]} -     */ -    static createMapping(text) { -        return new Array(text.length).fill(1); -    } - -    /** -     * @param {number[]} mapping -     * @returns {number[]} -     */ -    static normalizeMapping(mapping) { -        const result = []; -        for (const value of mapping) { -            result.push( -                (typeof value === 'number' && Number.isFinite(value)) ? -                Math.floor(value) : -                0 -            ); -        } -        return result; -    } -} |