void Highlighter::highlightBlock(const QString &text) { QTextCharFormat fmt; fmt.setFont(QFont(m_Palette->mainFont, m_Palette->mainFontPointSize)); setFormat(0, text.length(), fmt); foreach(const ::HighlightingRule& rule, kHighlightingRules.rules) { QRegExp expression(rule.pattern); int index = expression.indexIn(text); while (index >= 0) { index = expression.pos(rule.index); int length = expression.cap(rule.index).length(); if (m_Formats.contains(rule.t)) { fmt = m_Formats[rule.t]; setFormat(index, length, fmt); } index = expression.indexIn(text, index + length); } } setCurrentBlockState(0); bool isMultiline = matchMultiline(text, kHighlightingRules.triSingle); if (!isMultiline) isMultiline = matchMultiline(text, kHighlightingRules.triDouble); }
void BashHighlighter::highlightBlock(const QString& text) { for (RuleList::iterator it = __rules.begin(); it != __rules.end(); ++it) { int idx = (*it).pattern.indexIn(text, 0); while ( idx >= 0 ) { // Get index of Nth match idx = (*it).pattern.pos((*it).nth); int length = (*it).pattern.cap((*it).nth).length(); setFormat(idx, length, (*it).format); idx = (*it).pattern.indexIn(text, idx + length); } } setCurrentBlockState(0); // Do multi-line strings bool isInMultilne = matchMultiline(text, triSingleQuote, 1, __basicStyles.value("string2")); if ( !isInMultilne ) isInMultilne = matchMultiline(text, triDoubleQuote, 2, __basicStyles.value("string2")); }