void Highlighter::highlightBlock(const QString &text) { if (!m_defaultContext.isNull() && !m_isBroken) { try { setupDataForBlock(text); handleContextChange(m_currentContext->lineBeginContext(), m_currentContext->definition()); ProgressData progress; const int length = text.length(); while (progress.offset() < length) iterateThroughRules(text, length, &progress, false, m_currentContext->rules()); handleContextChange(m_currentContext->lineEndContext(), m_currentContext->definition(), false); m_contexts.clear(); if (m_indentationBasedFolding) { applyIndentationBasedFolding(text); } else { applyRegionBasedFolding(); // In the case region depth has changed since the last time the state was set. setCurrentBlockState(computeState(extractObservableState(currentBlockState()))); } } catch (const HighlighterException &) { m_isBroken = true; } } applyFormatToSpaces(text, formatForCategory(VisualWhitespace)); }
void Highlighter::highlightBlock(const QString &text) { if (!m_defaultContext.isNull() && !m_isBroken) { try { setupDataForBlock(text); handleContextChange(m_currentContext->lineBeginContext(), m_currentContext->definition()); ProgressData *progress = new ProgressData; const int length = text.length(); while (progress->offset() < length) iterateThroughRules(text, length, progress, false, m_currentContext->rules()); if (extractObservableState(currentBlockState()) != WillContinue) { handleContextChange(m_currentContext->lineEndContext(), m_currentContext->definition(), false); } if (length == 0) { handleContextChange(m_currentContext->lineEmptyContext(), m_currentContext->definition(), false); } delete progress; m_contexts.clear(); if (m_indentationBasedFolding) { applyIndentationBasedFolding(text); } else { applyRegionBasedFolding(); // In the case region depth has changed since the last time the state was set. setCurrentBlockState(computeState(extractObservableState(currentBlockState()))); } Parentheses parentheses; for (int pos = 0; pos < length; ++pos) { const QChar c = text.at(pos); if (isOpeningParenthesis(c)) parentheses.push_back(Parenthesis(Parenthesis::Opened, c, pos)); else if (isClosingParenthesis(c)) parentheses.push_back(Parenthesis(Parenthesis::Closed, c, pos)); } TextDocumentLayout::setParentheses(currentBlock(), parentheses); } catch (const HighlighterException &e) { Core::MessageManager::write( QCoreApplication::translate("GenericHighlighter", "Generic highlighter error: %1") .arg(e.message()), Core::MessageManager::WithFocus); m_isBroken = true; } } formatSpaces(text); }