Example #1
0
  /**
   * 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;
    }
  }