/** * Returns the index with which to start parsing the next part of the string, once this method is * done with its part */ private int parseInternalInterval(String s, int index, NoteContext context) { if (context.isRest) { return index; } // An internal interval is indicated by a single quote if ((index < s.length()) && (s.charAt(index) == '\'')) { int intervalLength = 0; // Verify that index+1 is a number representing the interval. if (index + 1 < s.length() && ((s.charAt(index + 1) >= '0') && (s.charAt(index + 1) <= '9'))) { intervalLength = 1; } // We'll allow for the possibility of double-sharps and double-flats. if ((intervalLength == 1) && (index + 2 < s.length()) && ((s.charAt(index + 2) == '#') || (s.charAt(index + 2) == 'B'))) { intervalLength = 2; } if ((intervalLength == 2) && (index + 3 < s.length()) && ((s.charAt(index + 3) == '#') || (s.charAt(index + 3) == 'B'))) { intervalLength = 3; } context.internalInterval = Intervals.getHalfsteps(s.substring(index + 1, index + intervalLength + 1)); return index + intervalLength + 1; } else { return index; } }