"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.checkText = exports.IncludeExcludeFlag = exports.validateText = exports.diagSource = void 0; const Dictionary = __importStar(require("./SpellingDictionary")); const Settings = __importStar(require("./Settings")); exports.diagSource = 'cSpell Checker'; const TV = __importStar(require("./textValidator")); function validateText(text, settings) { const finalSettings = Settings.finalizeSettings(settings); const dict = Dictionary.getDictionary(finalSettings); return dict.then((dict) => [...TV.validateText(text, dict, finalSettings)]); } exports.validateText = validateText; var IncludeExcludeFlag; (function (IncludeExcludeFlag) { IncludeExcludeFlag["INCLUDE"] = "I"; IncludeExcludeFlag["EXCLUDE"] = "E"; })(IncludeExcludeFlag = exports.IncludeExcludeFlag || (exports.IncludeExcludeFlag = {})); async function checkText(text, settings) { const validationResult = validateText(text, settings); const finalSettings = Settings.finalizeSettings(settings); const includeRanges = TV.calcTextInclusionRanges(text, finalSettings); const result = []; let lastPos = 0; for (const { startPos, endPos } of includeRanges) { result.push({ text: text.slice(lastPos, startPos), startPos: lastPos, endPos: startPos, flagIE: IncludeExcludeFlag.EXCLUDE, }); result.push({ text: text.slice(startPos, endPos), startPos, endPos, flagIE: IncludeExcludeFlag.INCLUDE, }); lastPos = endPos; } result.push({ text: text.slice(lastPos), startPos: lastPos, endPos: text.length, flagIE: IncludeExcludeFlag.EXCLUDE, }); const issues = await validationResult; function* merge() { let i = 0; for (const r of result) { if (i >= issues.length || issues[i].offset >= r.endPos) { yield r; continue; } const span = { ...r }; while (i < issues.length && issues[i].offset < span.endPos) { const issue = issues[i]; const endPos = issue.offset; const text = span.text.slice(0, endPos - span.startPos); const endPosError = issue.offset + issue.text.length; yield { ...span, text, endPos }; yield { ...span, isError: true, startPos: issue.offset, endPos: endPosError, text: issue.text }; span.text = span.text.slice(endPosError - span.startPos); span.startPos = endPosError; i += 1; } yield span; } } return { text, items: [...merge()].filter((i) => i.startPos < i.endPos), }; } exports.checkText = checkText; //# sourceMappingURL=validator.js.map