d11 theme
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

94 lines
3.7 KiB

"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