本文整理汇总了C++中previousBlockState函数的典型用法代码示例。如果您正苦于以下问题:C++ previousBlockState函数的具体用法?C++ previousBlockState怎么用?C++ previousBlockState使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了previousBlockState函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: setCurrentBlockState
// Overrides the function from QSyntaxHighlighter;
// gets called by QTextEditor whenever
// a block (line of text) needs to be repainted
void XHTMLHighlighter::highlightBlock(const QString &text)
{
// By default, all block states are -1;
// in our implementation regular text is state == 1
if (previousBlockState() == -1) {
setCurrentBlockState(State_Text);
}
// Propagate previous state; needed for state tracking
else {
setCurrentBlockState(previousBlockState());
}
if (text.isEmpty()) {
return;
}
SettingsStore settings;
m_enableSpellCheck = settings.spellCheck();
// Run spell check over the text.
if (m_enableSpellCheck && m_checkSpelling) {
CheckSpelling(text);
}
// The order of these operations is important
// because some states format text over previous states!
HighlightLine(text, State_Entity);
HighlightLine(text, State_CSS);
HighlightLine(text, State_HTML);
HighlightLine(text, State_CSSComment);
HighlightLine(text, State_HTMLComment);
HighlightLine(text, State_DOCTYPE);
}
示例2: highlightBlock
void OSyntaxHighlighter :: highlightBlock (const QString &qscText )
{
logical term = NO;
int iStart = 0;
setCurrentBlockState(0);
if(previousBlockState() > 0) // in block
FindEndBlock(qscText,iStart,elements[previousBlockState()]);
if(iStart>=0)
FindElements(qscText,iStart);
}
示例3: setCurrentBlockState
void Highlighter::highlightBlock(const QString &text)
{
if (!m_syntaxer) return;
if (text.isEmpty()) {
setCurrentBlockState(previousBlockState());
return;
}
setCurrentBlockState(0);
int startCommentIndex = -1;
int startStringIndex = -1;
const CommentInfo * currentCommentInfo = NULL;
int pbs = previousBlockState();
if (pbs <= 0) {
m_syntaxer->matchCommentStart(text, 0, startCommentIndex, currentCommentInfo);
}
else if (pbs >= COMMENTOFFSET) {
currentCommentInfo = m_syntaxer->getCommentInfo(previousBlockState() - COMMENTOFFSET);
startCommentIndex = 0;
}
else if (pbs == STRINGOFFSET) {
startStringIndex = 0;
}
QString noComment = text;
while (startCommentIndex >= 0) {
int endIndex = currentCommentInfo->m_multiLine ? text.indexOf(currentCommentInfo->m_end, startCommentIndex, currentCommentInfo->m_caseSensitive) : text.length();
int commentLength;
if (endIndex == -1) {
setCurrentBlockState(currentCommentInfo->m_index + COMMENTOFFSET);
commentLength = text.length() - startCommentIndex;
}
else {
commentLength = endIndex - startCommentIndex + currentCommentInfo->m_end.length();
}
noComment.replace(startCommentIndex, commentLength, QString(commentLength, ' '));
QTextCharFormat * cf = m_styleFormats.value("Comment", NULL);
if (cf != NULL) {
setFormat(startCommentIndex, commentLength, *cf);
}
m_syntaxer->matchCommentStart(text, startCommentIndex + commentLength, startCommentIndex, currentCommentInfo);
}
highlightStrings(startStringIndex, noComment);
highlightTerms(noComment);
}
示例4: expression
void HEMSyntaxHighlighter::highlightBlock(const QString &text)
{
for (const HighlightingRule &rule : highlightingRules) {
QRegExp expression(rule.pattern);
int index = expression.indexIn(text);
while (index >= 0) {
int length = expression.matchedLength();
setFormat(index, length, rule.format);
index = expression.indexIn(text, index + length);
}
}
setCurrentBlockState(STATE_NORMAL);
int startIndex = 0;
QRegExp include("\\binclude\\b"), newline("\\r?\\n");
int ilength = QString("include").length(); // 7
if (previousBlockState() != STATE_INCLUDE)
startIndex = include.indexIn(text) + ilength;
while (startIndex >= ilength) {
int endIndex = newline.indexIn(text);
int includeLength;
if (endIndex == -1) {
setCurrentBlockState(STATE_INCLUDE);
includeLength = text.length() - startIndex;
} else {
includeLength = endIndex - startIndex
+ newline.matchedLength();
}
setFormat(startIndex, includeLength, includeFileFormat);
startIndex = include.indexIn(text, startIndex + includeLength);
}
}
示例5: foreach
foreach (const MultilineHighlightingRule &rule, multilineHighlightingRules)
{
QRegExp startExpression(rule.patternStart);
QRegExp endExpression(rule.patternEnd);
int startIndex = 0;
if (previousBlockState() != rule.statusCode)
{
startIndex = startExpression.indexIn(text);
}
while (startIndex >= 0)
{
int endIndex = endExpression.indexIn(text, startIndex);
int matchLength;
if (endIndex == -1)
{
setCurrentBlockState(rule.statusCode);
matchLength = text.length() - startIndex;
}
else
{
matchLength = endIndex - startIndex + endExpression.matchedLength();
}
setFormat(startIndex, matchLength, rule.format);
startIndex = rule.patternStart.indexIn(text, startIndex + matchLength);
}
}
示例6: setCurrentBlockState
void CodeHighlighter::highlightCommentBlocks(const QString &text)
{
const QList<LexemeAppearance *> &lexemes = m_theme->blockLexemes();
for (const LexemeAppearance *lexeme : lexemes) {
const QRegExp &startPattern = lexeme->pattern();
const QRegExp &endPattern = lexeme->endPattern();
setCurrentBlockState(0);
int startIndex = 0;
if (previousBlockState() != 1)
startIndex = startPattern.indexIn(text);
while (startIndex >= 0) {
int endIndex = endPattern.indexIn(text, startIndex);
int commentLength;
if (endIndex == -1) {
setCurrentBlockState(1);
commentLength = text.length() - startIndex;
} else {
commentLength = endIndex - startIndex + endPattern.matchedLength();
}
setFormat(startIndex, commentLength, *lexeme->format());
startIndex = startPattern.indexIn(text, startIndex + commentLength);
}
}
}
示例7: delimiter
bool Highlighter::matchMultiline(const QString& text, const ::HighlightingRule& rule)
{
QRegExp delimiter(rule.pattern);
int start = 0;
int add = 0;
int end = 0;
int length = 0;
if (previousBlockState() != rule.index)
{
start = delimiter.indexIn(text);
add = delimiter.matchedLength();
}
while (start >= 0)
{
end = delimiter.indexIn(text, start + add);
if (end >= add)
{
length = end - start + add + delimiter.matchedLength();
setCurrentBlockState(0);
}
else
{
setCurrentBlockState(rule.index);
length = text.length() - start + add;
}
QTextCharFormat fmt;
if (m_Formats.contains(rule.t))
fmt = m_Formats[rule.t];
setFormat(start, length, fmt);
start = delimiter.indexIn(text, start + length);
}
return currentBlockState() == rule.index;
}
示例8: previousBlockState
void SyntaxHighlighter::highlightBlock(const QString& str)
{
int nState = previousBlockState();
int nStart = 0;
for(int i = 0; i < str.length(); ++i) {
if(nState == InsideCStyleComment) {
if(str.mid(i, 2) == "*/") {
nState = NormalState;
setFormat(nStart, i - nStart + 2, Qt::darkGray);
i++;
}
}
else if(nState == InsideCString) {
if (str.mid(i, 1) == "\"" || str.mid(i, 1) == "\'") {
if (str.mid(i - 1, 2) != "\\\"" && str.mid(i - 1, 2) != "\\\'") {
nState = NormalState;
setFormat(nStart, i - nStart + 1, Qt::cyan);
}
}
}
else {
if (str.mid(i, 2) == "//") {
setFormat(i, str.length() - i, Qt::darkGray);
break;
}
else if (str.mid(i, 1) == "#") {
setFormat(i, str.length() - i, Qt::green);
break;
}
else if (str.at(i).isNumber()) {
setFormat(i, 1, Qt::cyan);
}
else if (str.mid(i, 2) == "/*") {
nStart = i;
nState = InsideCStyleComment;
}
else if (str.mid(i, 1) == "\"" || str.mid(i, 1) == "\'") {
nStart = i;
nState = InsideCString;
}
else {
QString strKeyword = getKeyword(i, str);
if (!strKeyword.isEmpty()) {
setFormat(i, strKeyword.length(), Qt::white);
i += strKeyword.length() - 1;
}
}
}
}
if (nState == InsideCStyleComment) {
setFormat(nStart, str.length() - nStart, Qt::darkGray);
}
if (nState == InsideCString) {
setFormat(nStart, str.length() - nStart, Qt::cyan);
}
setCurrentBlockState(nState);
}
示例9: while
void LatexFileType::highlightBlock(const QString &text)
{
//comments
int comInd = text.indexOf('%');
while (comInd > 0 && text.at(comInd - 1) == '\\')
comInd = text.indexOf('%', comInd + 1);
clearCurrentBlockSkipSegments();
addCurrentBlockSkipSegment(comInd);
if (comInd >= 0)
setFormat(comInd, text.length() - comInd, QColor(Qt::darkGray));
QString ntext = text.left(comInd);
//commands
QRegExp rx("(\\\\[a-zA-Z]*|\\\\#|\\\\\\$|\\\\%|\\\\&|\\\\_|\\\\\\{|\\\\\\})+");
int pos = rx.indexIn(ntext);
while (pos >= 0) {
int len = rx.matchedLength();
setFormat(pos, len, QColor(Qt::red).lighter(70));
pos = rx.indexIn(ntext, pos + len);
}
//multiline (math mode)
setCurrentBlockState(!ntext.isEmpty() ? 0 : previousBlockState());
int startIndex = 0;
bool firstIsStart = false;
if (previousBlockState() != 1) {
startIndex = indexOf(ntext, "$");
firstIsStart = true;
}
while (startIndex >= 0)
{
int endIndex = indexOf(ntext, "$", startIndex + (firstIsStart ? 1 : 0));
int commentLength;
if (endIndex == -1) {
setCurrentBlockState(1);
commentLength = ntext.length() - startIndex;
} else {
commentLength = endIndex - startIndex + 1;
}
setFormat(startIndex, commentLength, QColor(Qt::darkGreen));
startIndex = indexOf(ntext, "$", startIndex + commentLength);
}
}
示例10: setCurrentBlockState
void SmkMarkHighlighter::_aux_multiBlockMatch(
const QString& text,
const QString& bgnFlag,
const QString& endFlag,
const QTextCharFormat& format,
const unsigned field )
{
if(previousBlockState() == -1)
return;
setCurrentBlockState(currentBlockState() & (~field));
if(previousBlockState() & field) {
int endid = text.indexOf(endFlag, 0);
if(endid != -1) {
// we find a endFlag
setFormat(0, endid+endFlag.length(), format);
} else {
// we do not find a endFlag, mark this line and go on
setFormat(0, text.length(), format);
// if(previousBlockState() != -1)
setCurrentBlockState(currentBlockState() | field);
}
}
else {
int bgnid = text.indexOf(bgnFlag, 0);
while(bgnid != -1) {
int endid = text.indexOf(endFlag, bgnid+bgnFlag.length());
if(endid != -1) {
// we find a endFlag
setFormat(bgnid, endid+endFlag.length()-bgnid, format);
bgnid = text.indexOf(bgnFlag, endid+endFlag.length());
} else {
// we do not find a endFlag, mark this line and go on
setFormat(bgnid, text.length()-bgnid, format);
setCurrentBlockState(currentBlockState() | field);
break;
}
}//while(...
}//if..else...
}
示例11: setFormat
void SyntaxHighligther::highlightBlock(const QString& text) {
setFormat(0, text.size(), defaultFormat_);
std::vector<SyntaxFormater*>::iterator it;
for (it = formaters_.begin(); it != formaters_.end(); ++it) {
SyntaxFormater::Result res = (*it)->eval(text, previousBlockState());
for (size_t i = 0; i < res.start.size(); i++) {
setFormat(res.start[i], res.length[i], *res.format);
setCurrentBlockState(res.outgoingState);
}
}
}
示例12: foreach
foreach (HighlightingRule rule, m_highlightingRules) {
if(!rule.block) {
QRegExp expression(rule.expression);
int index = text.indexOf(expression);
while (index >= 0) {
int length = expression.matchedLength();
/*IntervallWithFormat temp;
temp.index = index;
temp.length = length;
temp.format = rule.format;
keywords.append(temp);*/
//setFormat(index, length, rule.format);
applyFormat(index, length, rule.format);
index = text.indexOf(expression, index + length);
}
} else {
// mathMode
setCurrentBlockState(0);
int startIndex = 0;
if (previousBlockState() != 1)
//startIndex = text.indexOf(mathModeStartExpression);
startIndex = text.indexOf(rule.startExpression);
while (startIndex >= 0) {
//int endIndex = text.indexOf(mathModeEndExpression, startIndex+1);
int endIndex = text.indexOf(rule.endExpression, startIndex+1);
int mathModeLength;
if (endIndex == -1) {
setCurrentBlockState(1);
mathModeLength = text.length() - startIndex;
} else {
/*mathModeLength = endIndex - startIndex
+ mathModeEndExpression.matchedLength();*/
mathModeLength = endIndex - startIndex
+ rule.endExpression.matchedLength();
}
/*IntervallWithFormat temp;
temp.index = startIndex;
temp.length = mathModeLength;
temp.format = m_mathModeFormat;
mathModes.append(temp);*/
//setFormat(startIndex, mathModeLength, m_mathModeFormat);
applyFormat(startIndex, mathModeLength, m_mathModeFormat);
/*startIndex = text.indexOf(mathModeStartExpression,
startIndex + mathModeLength);*/
startIndex = text.indexOf(rule.startExpression,
startIndex + mathModeLength);
}
}
}
示例13: type
void QMLHighlighter::highlightBlock(const QString &text)
{
QTextCharFormat keywordFormat;
keywordFormat.setForeground(QColor("#d7ffaf")); // Identifier
QTextCharFormat typeFormat;
typeFormat.setForeground(QColor("#afffff")); // Type
QTextCharFormat commentFormat;
commentFormat.setForeground(QColor("#8a8a8a")); // Comment
QTextCharFormat numericConstantFormat;
numericConstantFormat.setForeground(QColor("#ffffd7")); // Constant
QTextCharFormat stringConstantFormat;
stringConstantFormat.setForeground(QColor("#ffffd7"));
QRegExp type("\\b[A-Z][A-Za-z]+\\b");
QRegExp numericConstant("[0-9]+\\.?[0-9]*");
QRegExp stringConstant("['\"].*['\"]");//Not multiline strings, but they're rare
QRegExp lineComment("//[^\n]*");
QRegExp startComment("/\\*");
QRegExp endComment("\\*/");
applyBasicHighlight(text, type, typeFormat);
applyBasicHighlight(text, numericConstant, numericConstantFormat);
applyBasicHighlight(text, stringConstant, stringConstantFormat);
applyBasicHighlight(text, lineComment, commentFormat);
setCurrentBlockState(0);
int startIndex = 0;
if (previousBlockState() != 1)
startIndex = text.indexOf(startComment);
while (startIndex >= 0) {
int endIndex = text.indexOf(endComment, startIndex);
int commentLength;
if (endIndex == -1) {
setCurrentBlockState(1);
commentLength = text.length() - startIndex;
} else {
commentLength = endIndex - startIndex
+ endComment.matchedLength();
}
setFormat(startIndex, commentLength, commentFormat);
startIndex = text.indexOf(startComment,
startIndex + commentLength);
}
}
示例14: matchMultiline
bool BashHighlighter::matchMultiline(const QString& text,
const QRegExp& delimiter,
const int inState,
const QTextCharFormat& style) {
int start = -1;
int add = -1;
int end = -1;
int length = 0;
// If inside triple-single quotes, start at 0
if ( previousBlockState() == inState ) {
start = 0;
add = 0;
}
// Otherwise, look for the delimiter on this line
else {
start = delimiter.indexIn(text);
// Move past this match
add = delimiter.matchedLength();
}
// As long as there's a delimiter match on this line...
while ( start >= 0 ) {
// Look for the ending delimiter
end = delimiter.indexIn(text, start + add);
// Ending delimiter on this line?
if ( end >= add ) {
length = end - start + add + delimiter.matchedLength();
setCurrentBlockState(0);
}
// No; multi-line string
else {
setCurrentBlockState(inState);
length = text.length() - start + add;
}
// Apply formatting and look for next
setFormat(start, length, style);
start = delimiter.indexIn(text, start + length);
}
// Return True if still inside a multi-line string, False otherwise
if ( currentBlockState() == inState )
return true;
else
return false;
}
示例15: highlightSubBlock
void SyntaxHighlighter::highlightBlock(const QString &text)
{
//Do the main block highlighting.
highlightSubBlock(text, 0, previousBlockState());
//Run the set of inline rules.
foreach (const HighlightingRule &rule, hlRules)
{
QRegExp expression(rule.pattern);
int index = expression.indexIn(text);
while(index >= 0)
{
int length = expression.matchedLength();
setFormat(index, length, rule.format);
index = expression.indexIn(text, index + length);
}
}