void SyntaxHighlighter::highlightBlock(const QString& text) { for (auto r : rules) { auto iter = r.first.globalMatch(text); while (iter.hasNext()) { auto match = iter.next(); auto index = match.lastCapturedIndex(); setFormat(match.capturedStart(index), match.capturedLength(index), r.second); } } }
/** * @brief prepend the match string with specify symbol * @param input string need to prepend symbol * @param number_length the length of the number, will prepend symbol * if the length smaller than this number * @param symbol symbol prepand before the number * @return the name after alter * @example ex : number_length == 3, reg = (\\d+), symbol = '0' * then "1" == "001", "10" == "010" * ex : number_length == 2, reg = (\\d+), symbol = '0' * then "1" == "01", "10" == "10" */ QString prepend_symbol_on_match(QString const &input, int number_length, QRegularExpression const ®, QChar symbol) { auto new_file_name = input; auto match = reg.match(new_file_name); if(match.hasMatch()){ auto const Captured = match.captured(0); if(Captured.size() < number_length){ new_file_name.insert(match.capturedStart(0), QString(number_length - match.capturedLength(1), symbol)); } } return new_file_name; }
void ItemSourceHighlighter::highlightBlock(const QString& text) { // // Apply matching highlighting rules. // for (const auto& rule : rules_) { for (const auto& expression : rule.expressions) { auto matches = expression.globalMatch(text); while (matches.hasNext() == true) { auto match = matches.next(); setFormat(match.capturedStart(1), match.capturedLength(1), rule.format); } } } }
const QString clearHTMLTags(const QString &text) { const QRegularExpression regex("<(\\w+)[^>]*>([^<]*)</\\1>"); QString ret = text; do { const auto match = regex.match(ret); if (!match.isValid() || !match.hasMatch()) break; const int start = match.capturedStart(); const int len = match.capturedLength(); const QString &cap = match.captured(2); ret.replace(start, len, cap); } while (true); return ret; }