scrabble-solver
Version:
Scrabble Solver 2 - Free, open-source, cross-platform, multi-language analysis tool for Scrabble, Scrabble Duel, Super Scrabble, Letter League, Crossplay, Literaki, and Kelimelik. Quickly find the top-scoring words using the given board and tiles.
47 lines (46 loc) • 1.99 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.normalizeDefinition = void 0;
const striptags_1 = __importDefault(require("striptags"));
const EMPHASIS_TAGS = ['a', 'b', 'em', 'internalXref'];
const normalizeHtmlTags = (definition) => (0, striptags_1.default)((0, striptags_1.default)(definition, EMPHASIS_TAGS), undefined, '"');
const normalizeLineBreaks = (definition) => definition.replace(/\r\n/g, '\n');
const normalizeWhitespace = (definition) => definition.replace(/[^\S\n ]+/g, ' ').replace(/[ ]+/g, ' ');
const normalizeQuotes = (definition) => definition.replace(/\."/g, '".');
/**
* `(1.2) definition` -> `definition`
*/
const normalizeMarkers = (definition) => definition.replace(/^\(\d+\.\d+\)\s+/g, '');
const normalizeTrailingSymbols = (definition) => definition.trim().replace(/:$/, '');
const normalizeLeadingSymbols = (definition) => definition.trim().replace(/^:/, '');
/**
* @see https://stackoverflow.com/a/40732368
*/
const normalizeNonWords = (definition) => (/[\w\u0621-\u064A]+/.test(definition) ? definition : '');
const normalizeCommas = (definition) => {
return definition
.replace(/\s+,\s+/g, ', ')
.replace(/^,/, '')
.replace(/,$/, '');
};
const normalizers = [
normalizeHtmlTags,
normalizeMarkers,
normalizeQuotes,
normalizeLineBreaks,
normalizeWhitespace,
normalizeTrailingSymbols,
normalizeLeadingSymbols,
normalizeNonWords,
normalizeCommas,
(definition) => definition.trim(),
];
const normalizeDefinition = (definition) => {
const normalized = normalizers.reduce((result, normalize) => normalize(result), definition);
const hasChanged = normalized !== definition;
return hasChanged ? (0, exports.normalizeDefinition)(normalized) : normalized;
};
exports.normalizeDefinition = normalizeDefinition;