int CtrlrMIDIBufferTokeniser::readNextToken (CodeDocument::Iterator &source) { const juce_wchar c = source.peekNextChar(); int result = CtrlrMIDIBufferTokeniser::tokenType_rawData; int pos = source.getPosition(); int prefixHigh = (tokenSet.prefixLen*3)-1; int suffixLow = ((tokenSet.len) - (tokenSet.suffixLen*3)); int suffixHigh = tokenSet.len; int dataLow = (tokenSet.dataOffset*3)-1; int dataHigh = dataLow + ((tokenSet.dataLen*3)); int nameLow = (tokenSet.nameOffset*3)-1; int nameHigh = nameLow + (tokenSet.nameLen*3); source.skipWhitespace(); switch (c) { case 0: source.skip(); return (result); } if (owner.getUnequalPosition().contains(pos)) { source.skip(); return (tokenType_mismatch); } if (pos >= 0 && pos < prefixHigh && prefixHigh>0) { source.skip(); return (tokenType_prefix); } if (pos >= suffixLow && pos <= suffixHigh) { source.skip(); return (tokenType_suffix); } if (pos >= dataLow && pos < dataHigh) { source.skip(); return (tokenType_data); } if (pos >= nameLow && pos < nameHigh) { source.skip(); return (tokenType_name); } source.skip(); return result; }
//============================================================================== int CPlusPlusCodeTokeniser::readNextToken (CodeDocument::Iterator& source) { int result = tokenType_error; source.skipWhitespace(); juce_wchar firstChar = source.peekNextChar(); switch (firstChar) { case 0: source.skip(); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': result = CppTokeniser::parseNumber (source); break; case '.': result = CppTokeniser::parseNumber (source); if (result == tokenType_error) result = tokenType_punctuation; break; case ',': case ';': case ':': source.skip(); result = tokenType_punctuation; break; case '(': case ')': case '{': case '}': case '[': case ']': source.skip(); result = tokenType_bracket; break; case '"': case '\'': CppTokeniser::skipQuotedString (source); result = tokenType_stringLiteral; break; case '+': result = tokenType_operator; source.skip(); if (source.peekNextChar() == '+') source.skip(); else if (source.peekNextChar() == '=') source.skip(); break; case '-': source.skip(); result = CppTokeniser::parseNumber (source); if (result == tokenType_error) { result = tokenType_operator; if (source.peekNextChar() == '-') source.skip(); else if (source.peekNextChar() == '=') source.skip(); } break; case '*': case '%': case '=': case '!': result = tokenType_operator; source.skip(); if (source.peekNextChar() == '=') source.skip(); break; case '/': result = tokenType_operator; source.skip(); if (source.peekNextChar() == '=') { source.skip(); } else if (source.peekNextChar() == '/') { result = tokenType_comment; source.skipToEndOfLine(); } else if (source.peekNextChar() == '*') { source.skip(); result = tokenType_comment; CppTokeniser::skipComment (source); } break; case '?': case '~': source.skip(); result = tokenType_operator; break; case '<': source.skip(); result = tokenType_operator; if (source.peekNextChar() == '=') { source.skip(); } else if (source.peekNextChar() == '<') { source.skip(); if (source.peekNextChar() == '=') source.skip(); } break; case '>': source.skip(); result = tokenType_operator; if (source.peekNextChar() == '=') { source.skip(); } else if (source.peekNextChar() == '<') { source.skip(); if (source.peekNextChar() == '=') source.skip(); } break; case '|': source.skip(); result = tokenType_operator; if (source.peekNextChar() == '=') { source.skip(); } else if (source.peekNextChar() == '|') { source.skip(); if (source.peekNextChar() == '=') source.skip(); } break; case '&': source.skip(); result = tokenType_operator; if (source.peekNextChar() == '=') { source.skip(); } else if (source.peekNextChar() == '&') { source.skip(); if (source.peekNextChar() == '=') source.skip(); } break; case '^': source.skip(); result = tokenType_operator; if (source.peekNextChar() == '=') { source.skip(); } else if (source.peekNextChar() == '^') { source.skip(); if (source.peekNextChar() == '=') source.skip(); } break; case '#': result = tokenType_preprocessor; source.skipToEndOfLine(); break; default: if (CppTokeniser::isIdentifierStart (firstChar)) result = CppTokeniser::parseIdentifier (source); else source.skip(); break; } return result; }
//============================================================================== int CPlusPlusCodeTokeniser::readNextToken (CodeDocument::Iterator& source) { int result = tokenType_error; source.skipWhitespace(); tchar firstChar = source.peekNextChar(); switch (firstChar) { case 0: source.skip(); break; case T('0'): case T('1'): case T('2'): case T('3'): case T('4'): case T('5'): case T('6'): case T('7'): case T('8'): case T('9'): result = CppTokeniser::parseNumber (source); break; case T('.'): result = CppTokeniser::parseNumber (source); if (result == tokenType_error) result = tokenType_punctuation; break; case T(','): case T(';'): case T(':'): source.skip(); result = tokenType_punctuation; break; case T('('): case T(')'): case T('{'): case T('}'): case T('['): case T(']'): source.skip(); result = tokenType_bracket; break; case T('"'): case T('\''): CppTokeniser::skipQuotedString (source); result = tokenType_stringLiteral; break; case T('+'): result = tokenType_operator; source.skip(); if (source.peekNextChar() == T('+')) source.skip(); else if (source.peekNextChar() == T('=')) source.skip(); break; case T('-'): source.skip(); result = CppTokeniser::parseNumber (source); if (result == tokenType_error) { result = tokenType_operator; if (source.peekNextChar() == T('-')) source.skip(); else if (source.peekNextChar() == T('=')) source.skip(); } break; case T('*'): case T('%'): case T('='): case T('!'): result = tokenType_operator; source.skip(); if (source.peekNextChar() == T('=')) source.skip(); break; case T('/'): result = tokenType_operator; source.skip(); if (source.peekNextChar() == T('=')) { source.skip(); } else if (source.peekNextChar() == T('/')) { result = tokenType_comment; source.skipToEndOfLine(); } else if (source.peekNextChar() == T('*')) { source.skip(); result = tokenType_comment; CppTokeniser::skipComment (source); } break; case T('?'): case T('~'): source.skip(); result = tokenType_operator; break; case T('<'): source.skip(); result = tokenType_operator; if (source.peekNextChar() == T('=')) { source.skip(); } else if (source.peekNextChar() == T('<')) { source.skip(); if (source.peekNextChar() == T('=')) source.skip(); } break; case T('>'): source.skip(); result = tokenType_operator; if (source.peekNextChar() == T('=')) { source.skip(); } else if (source.peekNextChar() == T('<')) { source.skip(); if (source.peekNextChar() == T('=')) source.skip(); } break; case T('|'): source.skip(); result = tokenType_operator; if (source.peekNextChar() == T('=')) { source.skip(); } else if (source.peekNextChar() == T('|')) { source.skip(); if (source.peekNextChar() == T('=')) source.skip(); } break; case T('&'): source.skip(); result = tokenType_operator; if (source.peekNextChar() == T('=')) { source.skip(); } else if (source.peekNextChar() == T('&')) { source.skip(); if (source.peekNextChar() == T('=')) source.skip(); } break; case T('^'): source.skip(); result = tokenType_operator; if (source.peekNextChar() == T('=')) { source.skip(); } else if (source.peekNextChar() == T('^')) { source.skip(); if (source.peekNextChar() == T('=')) source.skip(); } break; case T('#'): result = tokenType_preprocessor; source.skipToEndOfLine(); break; default: if (CppTokeniser::isIdentifierStart (firstChar)) result = CppTokeniser::parseIdentifier (source); else source.skip(); break; } //jassert (result != tokenType_unknown); return result; }