void Chord::setText(const QString &chordText) { this->chordText = chordText.trimmed(); int indexOfInversionBar = this->chordText.indexOf("/"); if (indexOfInversionBar > 0) bassInversion = this->chordText.right(this->chordText.size() - 1 - indexOfInversionBar); hasLettersAfterChordRoot = false;// min, maj, m, dim, add letters after chord root? int lettersBegin = (isFlat() || isSharp()) ? 2 : 1; int limit = hasBassInversion() ? indexOfInversionBar : this->chordText.length(); int endOfLetters = lettersBegin; bool diminishedSymbol = chordText.size() > endOfLetters && chordText.at(endOfLetters) == QChar( 0xc2b0); while (endOfLetters < limit && !(chordText.at(endOfLetters).isDigit() || diminishedSymbol || chordText.at(endOfLetters) == '(')) { endOfLetters++; hasLettersAfterChordRoot = true; } if (hasLettersAfterChordRoot) lettersAfterRoot = this->chordText.mid(lettersBegin, endOfLetters - lettersBegin); if (endOfLetters < limit) { int finalIndex = hasBassInversion() ? indexOfInversionBar : this->chordText.length(); lastPart = this->chordText.mid(endOfLetters, finalIndex - endOfLetters); } }
static char isPragma(char *p) { p = skipBlank(p); if( !isSharp(*p++) ) return 0; p = skipBlank(p); if( !startsWithWord(p, "pragma") ) return 0; return 1; }
static int isInclude(char *p) { p = skipBlank(p); if( !isSharp(*p++) ) return 0; p = skipBlank(p); if( strncmp(p, "include", 7) != 0 ) return 0; p += 7; p = skipBlank(p); if( *p != '"' && *p != '<') return 0; int isSystemInclude = (*p == '<'); char terminator = (isSystemInclude)? '>' : '"'; char *lastTerminatorP = NULL; //last terminator's pointer //find last terminator while( *++p != '\0' ){ if( *p == terminator ) lastTerminatorP = p; } if(lastTerminatorP == NULL) return 0; p = lastTerminatorP; while(*++p != '\0'){ if( !isBlank(*p) ) return 0; } return (isSystemInclude)? SYSTEM_INCLUDE : USER_INCLUDE; }
QString Chord::getRootKey() const { int lenght = (isFlat() || isSharp()) ? 2 : 1; return chordText.left(lenght); }