static void printHighlightMatch(std::string& result, Regex* re, HighlightBuffer& hlbuf, const char* line, size_t lineLength, const char* preparedRange, size_t matchOffset, size_t matchLength) { hlbuf.ranges.clear(); hlbuf.ranges.push_back(HighlightRange(matchOffset, matchLength)); highlightRegex(hlbuf.ranges, re, line, lineLength, preparedRange, matchOffset + matchLength); highlight(result, line, lineLength, hlbuf.ranges.empty() ? nullptr : &hlbuf.ranges[0], hlbuf.ranges.size(), kHighlightMatch); }
static void processMatchHighlightRegex(Regex* re, FilterHighlightBuffer& hlbuf, const FilterEntry& entry, size_t offset, const char* buffer, FilterOutput* output) { const char* data = entry.offset + buffer; hlbuf.ranges.clear(); highlightRegex(hlbuf.ranges, re, data, entry.length, nullptr, offset); hlbuf.result.clear(); highlight(hlbuf.result, data, entry.length, hlbuf.ranges.empty() ? nullptr : &hlbuf.ranges[0], hlbuf.ranges.size(), kHighlightMatch); processMatch(hlbuf.result.c_str(), hlbuf.result.size(), output); }
static void processMatchHighlightVisualAssist(const std::vector<VisualAssistFragment>& fragments, FilterHighlightBuffer& hlbuf, const FilterEntry& entry, const char* entryBuffer, const FilterEntry& nameEntry, const char* nameBuffer, FilterOutput* output) { const char* data = entryBuffer + entry.offset; hlbuf.ranges.clear(); for (auto& f: fragments) highlightRegex(hlbuf.ranges, f.re.get(), data, entry.length, nullptr, f.ispath ? 0 : entry.length - nameEntry.length); hlbuf.result.clear(); highlight(hlbuf.result, data, entry.length, hlbuf.ranges.empty() ? nullptr : &hlbuf.ranges[0], hlbuf.ranges.size(), kHighlightMatch); processMatch(hlbuf.result.c_str(), hlbuf.result.size(), output); }