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.
68 lines
3.7 KiB
68 lines
3.7 KiB
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.createCollectionP = exports.isWordInAnyDictionary = exports.createCollection = exports.SpellingDictionaryCollection = void 0; |
|
const SpellingDictionary_1 = require("./SpellingDictionary"); |
|
const gensequence_1 = require("gensequence"); |
|
const Settings_1 = require("../Settings"); |
|
class SpellingDictionaryCollection { |
|
constructor(dictionaries, name, wordsToFlag) { |
|
this.dictionaries = dictionaries; |
|
this.name = name; |
|
this.options = {}; |
|
this.mapWord = (word) => word; |
|
this.type = 'SpellingDictionaryCollection'; |
|
this.dictionaries = this.dictionaries.filter((a) => !!a.size).sort((a, b) => b.size - a.size); |
|
this.wordsToFlag = new Set(wordsToFlag.map((w) => w.toLowerCase())); |
|
this.source = dictionaries.map((d) => d.name).join(', '); |
|
this.isDictionaryCaseSensitive = this.dictionaries.reduce((a, b) => a || b.isDictionaryCaseSensitive, false); |
|
} |
|
has(word, hasOptions) { |
|
const options = SpellingDictionary_1.hasOptionToSearchOption(hasOptions); |
|
return !this.wordsToFlag.has(word.toLowerCase()) && isWordInAnyDictionary(this.dictionaries, word, options); |
|
} |
|
suggest(...args) { |
|
const [word, options, compoundMethod, numChanges] = args; |
|
const suggestOptions = typeof options === 'object' |
|
? options |
|
: { |
|
numSuggestions: options, |
|
compoundMethod, |
|
numChanges, |
|
}; |
|
return this._suggest(word, suggestOptions); |
|
} |
|
_suggest(word, suggestOptions) { |
|
const _suggestOptions = { ...suggestOptions }; |
|
const { numSuggestions = Settings_1.getDefaultSettings().numSuggestions || SpellingDictionary_1.defaultNumSuggestions, numChanges, compoundMethod, ignoreCase = true, } = suggestOptions; |
|
_suggestOptions.compoundMethod = this.options.useCompounds ? SpellingDictionary_1.CompoundWordsMethod.JOIN_WORDS : compoundMethod; |
|
const filter = (word) => { |
|
return !this.wordsToFlag.has(word.toLowerCase()) && (ignoreCase || word[0] !== SpellingDictionary_1.PREFIX_NO_CASE); |
|
}; |
|
const collector = SpellingDictionary_1.suggestionCollector(word, numSuggestions, filter, numChanges); |
|
this.genSuggestions(collector, suggestOptions); |
|
return collector.suggestions.map((r) => ({ ...r, word: r.word.replace(SpellingDictionary_1.regexPrefix, '') })); |
|
} |
|
get size() { |
|
return this.dictionaries.reduce((a, b) => a + b.size, 0); |
|
} |
|
genSuggestions(collector, suggestOptions) { |
|
const _suggestOptions = { ...suggestOptions }; |
|
const { compoundMethod = SpellingDictionary_1.CompoundWordsMethod.SEPARATE_WORDS } = suggestOptions; |
|
_suggestOptions.compoundMethod = this.options.useCompounds ? SpellingDictionary_1.CompoundWordsMethod.JOIN_WORDS : compoundMethod; |
|
this.dictionaries.forEach((dict) => dict.genSuggestions(collector, _suggestOptions)); |
|
} |
|
} |
|
exports.SpellingDictionaryCollection = SpellingDictionaryCollection; |
|
function createCollection(dictionaries, name, wordsToFlag = []) { |
|
return new SpellingDictionaryCollection(dictionaries, name, wordsToFlag); |
|
} |
|
exports.createCollection = createCollection; |
|
function isWordInAnyDictionary(dicts, word, options) { |
|
return !!gensequence_1.genSequence(dicts).first((dict) => dict.has(word, options)); |
|
} |
|
exports.isWordInAnyDictionary = isWordInAnyDictionary; |
|
function createCollectionP(dicts, name, wordsToFlag) { |
|
return Promise.all(dicts).then((dicts) => new SpellingDictionaryCollection(dicts, name, wordsToFlag)); |
|
} |
|
exports.createCollectionP = createCollectionP; |
|
//# sourceMappingURL=SpellingDictionaryCollection.js.map
|