UNPKG

@launchmenu/applet-notes

Version:
144 lines 11.8 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createCustomSearchPatternMatcher = void 0; const regexp_match_indices_1 = __importDefault(require("regexp-match-indices")); const core_1 = require("@launchmenu/core"); const model_react_1 = require("model-react"); const color_1 = __importDefault(require("color")); /** * Creates a custom search pattern matcher according to some user search pattern * @param getPattern The pattern to use, may use capture groups prefixed with `$` for text to be included in the search, and capture groups `#fff` or similar hex patterns for highlighting * @param getName The name for the matcher * @returns The search pattern matcher */ function createCustomSearchPatternMatcher(getPattern, getName) { const searchPatternMatcher = new model_react_1.DataCacher((hook, prev) => { var _a; // Retrieve the updated pattern and make sure it changes const pattern = getPattern(hook); if (prev && pattern == (prev === null || prev === void 0 ? void 0 : prev.pattern)) return prev; if (pattern == undefined) return { pattern }; // Try to create a regex matcher const regex = /\/(.*)\/(.*)/; const match = regex.exec(pattern); if (match) try { const regex = new RegExp(match[1], match[2]); return { pattern, matcher: ({ search }, hook) => { var _a; // Try to match the regex const match = regexp_match_indices_1.default(regex, search); if (!match) return; // Compute the search text const groups = match.indices.groups; let highlight = [ { start: match.index, end: match.index + match[0].length, text: match[0], tags: [core_1.highlightTags.patternMatch], }, ]; let searchText = search.substring(0, match.index) + search.substring(match.index + match[0].length); if (groups) { const result = getNodesFromGroups(groups, highlight, search); highlight = result.highlight; searchText = result.searchText + searchText; } // Return the selection and text return { name: (_a = getName === null || getName === void 0 ? void 0 : getName(hook)) !== null && _a !== void 0 ? _a : pattern, id: pattern, searchText, highlight, }; }, }; } catch (e) { } // Create a literal text matcher return { pattern, matcher: core_1.createStandardSearchPatternMatcher({ name: (_a = getName === null || getName === void 0 ? void 0 : getName(hook)) !== null && _a !== void 0 ? _a : pattern, id: pattern, matcher: ({ search }) => search.slice(0, pattern.length) == pattern ? [{ start: 0, end: pattern.length }] : undefined, }), }; }); /** Return the pattern matcher */ return (query, hook) => { var _a, _b; return (_b = (_a = searchPatternMatcher.get(hook)).matcher) === null || _b === void 0 ? void 0 : _b.call(_a, query, hook); }; } exports.createCustomSearchPatternMatcher = createCustomSearchPatternMatcher; /** * Retrieves the highlight nodes and search text from the regex groups * @param groups The regex groups * @param highlight The highlight nodes * @param search The search text * @returns The search text and highlight nodes */ function getNodesFromGroups(groups, highlight, search) { const { nodes, textItems } = Object.entries(groups) .filter(([, range]) => range) .reduce(({ nodes, textItems }, [key, [start, end]]) => { if (start != end) { const colorMatch = key.match(/c.*_(.+)/); if (colorMatch) { // Add a highlight node const colorString = colorMatch[1]; let color; try { new color_1.default("#" + colorString); color = "#" + colorString; } catch (e) { color = colorString; } const node = { start, end, text: search.substring(start, end), tags: [], style: { color }, }; return { nodes: core_1.mergeHighlightNodes([node], nodes), textItems, }; } else if (key.slice(0, 2) == "t_") { // Add a text range return { nodes, textItems: [ { index: start, text: search.substring(start, end) }, ...textItems, ], }; } } return { nodes, textItems }; }, { nodes: highlight, textItems: [], }); // Retrieve the search text and highlight nodes return { highlight: nodes, searchText: textItems .sort(({ index: a }, { index: b }) => a - b) .reduce((allText, { text, index }, i, items) => { var _a; return allText + text.substr(0, (((_a = items[i + 1]) === null || _a === void 0 ? void 0 : _a.index) || Infinity) - index); }, ""), }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQ3VzdG9tU2VhcmNoUGF0dGVybk1hdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YU1vZGVsL3Rvb2xzL2NyZWF0ZUN1c3RvbVNlYXJjaFBhdHRlcm5NYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdGQUFtRDtBQUNuRCwyQ0FNMEI7QUFDMUIsNkNBQXVEO0FBQ3ZELGtEQUEwQjtBQUUxQjs7Ozs7R0FLRztBQUNILFNBQWdCLGdDQUFnQyxDQUM1QyxVQUE4QyxFQUM5QyxPQUFnQztJQUVoQyxNQUFNLG9CQUFvQixHQUFHLElBQUksd0JBQVUsQ0FHeEMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7O1FBQ2Qsd0RBQXdEO1FBQ3hELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLE9BQU8sQ0FBQTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2xELElBQUksT0FBTyxJQUFJLFNBQVM7WUFBRSxPQUFPLEVBQUMsT0FBTyxFQUFDLENBQUM7UUFFM0MsZ0NBQWdDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQztRQUM3QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLElBQUksS0FBSztZQUNMLElBQUk7Z0JBQ0EsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QyxPQUFPO29CQUNILE9BQU87b0JBQ1AsT0FBTyxFQUFFLENBQUMsRUFBQyxNQUFNLEVBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRTs7d0JBQ3hCLHlCQUF5Qjt3QkFDekIsTUFBTSxLQUFLLEdBQUcs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