const markJsUtils = {}; markJsUtils.markKeyword = (mark, keyword, stringUtils, extraOptions = null) => { if (typeof keyword === 'string') { keyword = { type: 'text', value: keyword, }; } const isBasicSearch = ['ja', 'zh', 'ko'].indexOf(keyword.scriptType) >= 0; let value = keyword.value; let accuracy = keyword.accuracy ? keyword.accuracy : { value: 'exactly', limiters: ':;.,-–—‒_(){}[]!\'"+='.split('') }; if (isBasicSearch) accuracy = 'partially'; if (keyword.type === 'regex') { accuracy = 'complementary'; // Remove the trailing wildcard and "accuracy = complementary" will take care of // highlighting the relevant keywords. // Known bug: it will also highlight word that contain the term as a suffix for example for "ent*", it will highlight "present" // which is incorrect (it should only highlight what starts with "ent") but for now will do. Mark.js doesn't have an option // to tweak this behaviour. value = keyword.value.substr(0, keyword.value.length - 1); } mark.mark( [value], Object.assign( {}, { accuracy: accuracy, }, extraOptions ) ); }; if (typeof module !== 'undefined') { module.exports = markJsUtils; }