本文整理汇总了C++中TokenIterator类的典型用法代码示例。如果您正苦于以下问题:C++ TokenIterator类的具体用法?C++ TokenIterator怎么用?C++ TokenIterator使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了TokenIterator类的16个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: textDocument
QTextCursor ScCodeEditor::regionAroundCursor(const QTextCursor & cursor)
{
int cursorPosition = cursor.position();
BracketPair bracketPair;
TokenIterator it = TokenIterator::rightOf( textDocument()->begin(), 0 );
while (it.isValid()) {
nextBracketPair(it, bracketPair);
if (bracketPair.first.isValid() && bracketPair.first.position() < cursorPosition)
{
if ( bracketPair.second.isValid() && bracketPair.second.position() >= cursorPosition
&& bracketPairDefinesRegion(bracketPair) )
{
QTextCursor regionCursor(QPlainTextEdit::document());
regionCursor.setPosition(bracketPair.first.position() + 1);
regionCursor.setPosition(bracketPair.second.position(), QTextCursor::KeepAnchor);
return regionCursor;
}
} else {
break;
}
it = bracketPair.second;
}
return QTextCursor();
}
开发者ID:vanhuman,项目名称:supercollider-rvh,代码行数:27,代码来源:sc_editor.cpp
示例2: tokenIsFirstAndOnlyInBlock
inline static bool tokenIsFirstAndOnlyInBlock( const TokenIterator & it )
{
Q_ASSERT(it.isValid());
bool result = it->positionInBlock == 0;
result = result && static_cast<TextBlockData*>(it.block().userData())->tokens.size() == 1;
return result;
}
开发者ID:acamari,项目名称:supercollider,代码行数:7,代码来源:sc_editor.cpp
示例3: assert
bool
PreProcessor::elif_directive()
{
assert(tokenit.is(_PP_ELIF));
tokenit.next();
if (ifBlockEnables.empty()) {
ERROR("'if' directive is not found");
return false;
}
bool if_is_enable = ifBlockEnables.back();
if (if_is_enable) {
TokenIterator tag = tokenit;
skipUntilElseOrEnd();
tag.erase(tokenit-tag);
} else {
AST *ast = expression();
if (!ast) {
return false;
}
if (eval(ast)) {
ifBlockEnables.pop_back();
ifBlockEnables.push_back(true);
} else {
TokenIterator tag = tokenit;
skipUntilElseOrEnd();
tag.erase(tokenit-tag);
}
}
return true;
}
开发者ID:ktok07b6,项目名称:scc,代码行数:32,代码来源:PreProcessor.cpp
示例4: textCursor
void ScCodeEditor::gotoPreviousRegion()
{
QTextCursor cursor = textCursor();
int cursorPosition = cursor.position();
BracketPair prevBracketPair;
BracketPair bracketPair;
TokenIterator it = TokenIterator::rightOf( textDocument()->begin(), 0 );
while(it.isValid()) {
nextBracketPair(it, bracketPair);
if ( !bracketPair.second.isValid()
|| bracketPair.second.position() >= cursorPosition - 1 )
{
break;
}
if (bracketPairDefinesRegion(bracketPair)) {
prevBracketPair = bracketPair;
}
it = bracketPair.second;
}
if ( prevBracketPair.first.isValid() && prevBracketPair.second.isValid() )
{
setTextCursor( cursorAt(prevBracketPair.second, 1) );
return;
}
cursor.movePosition(QTextCursor::Start);
setTextCursor(cursor);
}
开发者ID:vanhuman,项目名称:supercollider-rvh,代码行数:30,代码来源:sc_editor.cpp
示例5: bracketPairDefinesRegion
static bool bracketPairDefinesRegion( const BracketPair & bracketPair )
{
Q_ASSERT(bracketPair.first.isValid());
Q_ASSERT(bracketPair.second.isValid());
if ( bracketPair.first->character != '(' || bracketPair.second->character != ')' )
return false;
if (!tokenIsFirstAndOnlyInBlock(bracketPair.second) || !tokenIsFirstAndOnlyInBlock(bracketPair.second))
return false;
// check whether this is an Event
TokenIterator it = bracketPair.first.next();
if (it.isValid()) {
if (it->type == Token::SymbolArg)
return false;
else {
++it;
if (it.isValid() && it->character == ':')
return false;
}
}
return true;
}
开发者ID:acamari,项目名称:supercollider,代码行数:25,代码来源:sc_editor.cpp
示例6: cursorAt
QTextCursor ScCodeEditor::cursorAt(const TokenIterator it, int offset)
{
Q_ASSERT(it.isValid());
QTextCursor textCursor(textDocument());
textCursor.setPosition(it.position() + offset);
return textCursor;
}
开发者ID:vanhuman,项目名称:supercollider-rvh,代码行数:9,代码来源:sc_editor.cpp
示例7: tokenMaybeRegionEnd
inline static bool tokenMaybeRegionEnd( const TokenIterator & it )
{
Q_ASSERT(it.isValid());
if (it->character != ')')
return false;
TokenIterator next_it = it.next();
return (!next_it.isValid() ||
next_it.block() != it.block() ||
next_it->character == ';');
}
开发者ID:vanhuman,项目名称:supercollider-rvh,代码行数:10,代码来源:sc_editor.cpp
示例8: Q_ASSERT
void ScCodeEditor::matchBracket( const TokenIterator & bracket, BracketPair & match )
{
Q_ASSERT(bracket.isValid());
switch(bracket->type) {
case Token::OpeningBracket:
match.first = bracket;
match.second = nextClosingBracket(bracket.next());
break;
case Token::ClosingBracket:
match.second = bracket;
match.first = previousOpeningBracket(bracket.previous());
break;
default:
match.first = TokenIterator();
match.second = TokenIterator();
}
}
开发者ID:vanhuman,项目名称:supercollider-rvh,代码行数:18,代码来源:sc_editor.cpp
示例9: readToken
/*******************************************************************
* Function Name: readToken
* Description: tokenize words
********************************************************************/
Ini::Token Ini::readToken( TokenIterator &cursor, string &word )
{
if( (*cursor)[0] == '[' )
{
word = lowerCase( cursor->substr(1, cursor->size() - 2) );
cursor++ ;
return group_TK ;
}
word = lowerCase( *cursor );
cursor ++ ;
if( *cursor == ":" )
{
// hh:mm:ss:mmm is a special case
if ( isNumber( word ) ) {
bool leave = false;
while ( !leave ) {
if ( *cursor == ":" ) {
word += *cursor ;
cursor++ ;
} else {
leave = true;
}
if ( isNumber( *cursor ) ) {
word += *cursor ;
cursor++ ;
} else {
leave = true;
}
}
return id_TK ;
} else {
cursor ++ ;
return def_TK ;
}
} else
return id_TK ;
}
开发者ID:melkyades,项目名称:cdpp,代码行数:44,代码来源:ini.cpp
示例10: bracketPairDefinesRegion
static bool bracketPairDefinesRegion( const BracketPair & bracketPair )
{
Q_ASSERT(bracketPair.first.isValid());
Q_ASSERT(bracketPair.second.isValid());
if (!tokenMaybeRegionStart(bracketPair.first) || !tokenMaybeRegionEnd(bracketPair.second))
return false;
// check whether this is an Event
TokenIterator it = bracketPair.first.next();
if (it.isValid()) {
if (it->type == Token::SymbolArg)
return false;
else {
++it;
if (it.isValid() && it->character == ':')
return false;
}
}
return true;
}
开发者ID:vanhuman,项目名称:supercollider-rvh,代码行数:22,代码来源:sc_editor.cpp
示例11: parseToken
ParsingResult parseToken(Token token, TokenIterator& begin, TokenIterator& end, const TokenAction& action = TokenAction())
{
if (begin >= end)
{
return make_pair(false, SemanticAction());
}
if (begin->name() != token.name())
{
return make_pair(false, SemanticAction());
}
const Token& theToken = *begin;
++begin;
if (action)
{
return make_pair(true, bind(action, theToken));
}
return make_pair(true, SemanticAction());
}
开发者ID:qinggeng,项目名称:tools,代码行数:18,代码来源:parser.cpp
示例12:
List<Token>
PreProcessor::replaceMacroParams(const List<Token> &mtokens, const List<List<Token>> &caller_params)
{
//FIXME: nested macro
//i.e. FUNC(x, FUNC(x,y))
List<Token> replace = mtokens;
TokenIterator it;
it.setTokens(&replace);
while (!it.eof()) {
if (it.is(_PP_MACRO_PARAM)) {
int index = it.val()->toInt();
const List<Token> ¶m = caller_params.at(index);
it.erase(1);
it.insert(param);
}
it.next();
}
return replace;
}
开发者ID:ktok07b6,项目名称:scc,代码行数:20,代码来源:PreProcessor.cpp
示例13: block
QTextCursor ScCodeEditor::selectionForPosition( int position )
{
QTextBlock block( textDocument()->findBlock(position) );
if (!block.isValid())
return QTextCursor();
int positionInBlock = position - block.position();
TokenIterator it = TokenIterator( block, positionInBlock );
if (it.type() == Token::Unknown) {
// Token is invalid, or Token::Unknown (i.e. punctuations).
// Prefer token at previous position.
TokenIterator alternativeIt = TokenIterator( block, positionInBlock - 1 );
if (alternativeIt.isValid())
it = alternativeIt;
}
if (it.isValid()) {
switch (it->type) {
case Token::OpeningBracket:
case Token::ClosingBracket:
{
BracketPair match;
matchBracket(it, match);
if (match.first.isValid() && match.second.isValid()) {
int start = match.first.position();
int end = match.second.position() + 1;
QTextCursor selection(textDocument());
if (it == match.second) {
selection.setPosition(start);
selection.setPosition(end, QTextCursor::KeepAnchor);
} else {
selection.setPosition(end);
selection.setPosition(start, QTextCursor::KeepAnchor);
}
return selection;
}
break;
}
default:
QTextCursor selection( textDocument() );
selection.setPosition( it.position() );
selection.setPosition( selection.position() + it->length, QTextCursor::KeepAnchor );
return selection;
}
}
return QTextCursor();
}
开发者ID:vanhuman,项目名称:supercollider-rvh,代码行数:50,代码来源:sc_editor.cpp
示例14: previousOpeningBracket
// taking nested brackets into account
TokenIterator ScCodeEditor::previousOpeningBracket(TokenIterator it)
{
int level = 0;
while (it.isValid()) {
switch (it->type) {
case Token::OpeningBracket:
if (level == 0)
return it;
--level;
break;
case Token::ClosingBracket:
++level;
default:
break;
}
--it;
}
return it;
}
开发者ID:vanhuman,项目名称:supercollider-rvh,代码行数:22,代码来源:sc_editor.cpp
示例15: hideMouseCursor
void ScCodeEditor::keyPressEvent( QKeyEvent *e )
{
hideMouseCursor(e);
QTextCursor cursor( textCursor() );
bool cursorMoved = true;
if (e == QKeySequence::MoveToNextWord)
moveToNextToken( cursor, QTextCursor::MoveAnchor );
else if (e == QKeySequence::MoveToPreviousWord)
moveToPreviousToken( cursor, QTextCursor::MoveAnchor );
else if (e == QKeySequence::SelectNextWord)
moveToNextToken( cursor, QTextCursor::KeepAnchor );
else if (e == QKeySequence::SelectPreviousWord)
moveToPreviousToken( cursor, QTextCursor::KeepAnchor );
else
cursorMoved = false;
if (cursorMoved) {
setTextCursor( cursor );
return;
}
switch (e->key()) {
case Qt::Key_Home:
{
Qt::KeyboardModifiers mods(e->modifiers());
if (mods && mods != Qt::ShiftModifier) {
GenericCodeEditor::keyPressEvent(e);
return;
}
QTextCursor::MoveMode mode =
mods & Qt::ShiftModifier ? QTextCursor::KeepAnchor : QTextCursor::MoveAnchor;
QTextCursor c(textCursor());
QTextBlock b(c.block());
int pos = indentedStartOfLine(b);
pos += b.position();
if (c.position() == pos)
c.movePosition(QTextCursor::StartOfLine, mode);
else
c.setPosition(pos, mode);
setTextCursor(c);
return;
}
case Qt::Key_Backtab:
{
QTextCursor cursor = textCursor();
insertSpaceToNextTabStop( cursor );
ensureCursorVisible();
return;
}
case Qt::Key_Backspace:
if (mInsertMatchingTokens && !overwriteMode() && e->modifiers() == 0)
if (removeMatchingTokens())
break;
GenericCodeEditor::keyPressEvent(e);
break;
case Qt::Key_Enter:
case Qt::Key_Return:
{
QTextBlock cursorBlock = cursor.block();
int cursorPosInBlock = cursor.position() - cursorBlock.position();
TokenIterator nextToken = TokenIterator::rightOf(cursorBlock, cursorPosInBlock);
if ( nextToken.block() == cursorBlock && nextToken.type() == Token::ClosingBracket )
{
cursor.beginEditBlock();
cursor.insertBlock();
cursor.insertBlock();
cursor.endEditBlock();
cursor.movePosition( QTextCursor::PreviousBlock, QTextCursor::KeepAnchor );
indent(cursor, JoinEditBlock);
cursor.movePosition( QTextCursor::EndOfBlock );
}
else {
cursor.beginEditBlock();
cursor.insertBlock();
cursor.endEditBlock();
indent(cursor, JoinEditBlock);
}
cursor.setVerticalMovementX(-1);
setTextCursor(cursor);
break;
}
default:
if (!overwriteMode() && insertMatchingTokens(e->text()))
break;
GenericCodeEditor::keyPressEvent(e);
}
mAutoCompleter->keyPress(e);
}
开发者ID:vanhuman,项目名称:supercollider-rvh,代码行数:98,代码来源:sc_editor.cpp
示例16: tokenMaybeRegionStart
inline static bool tokenMaybeRegionStart( const TokenIterator & it )
{
Q_ASSERT(it.isValid());
return ( it->character == '(' && it->positionInBlock == 0 );
}
开发者ID:vanhuman,项目名称:supercollider-rvh,代码行数:5,代码来源:sc_editor.cpp
注:本文中的TokenIterator类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论