code: private boolean iterateGroup(ValueIterator.Element result, int limit)
      {
          if (m_groupIndex_ < 0) {
              m_groupIndex_ = m_name_.getGroup(m_current_);
          }
  
          while (m_groupIndex_ < m_name_.m_groupcount_ &&
                 m_current_ < limit) {
              // iterate till the last group or the last codepoint
              int startMSB = UCharacterName.getCodepointMSB(m_current_);
              int gMSB     = m_name_.getGroupMSB(m_groupIndex_); // can be -1
              if (startMSB == gMSB) {
                  if (startMSB == UCharacterName.getCodepointMSB(limit - 1)) {
                      // if start and limit - 1 are in the same group, then enumerate
                      // only in that one
                      return iterateSingleGroup(result, limit);
                  }
                  // enumerate characters in the partial start group
                  // if (m_name_.getGroupOffset(m_current_) != 0) {
                  if (!iterateSingleGroup(result,
                                          UCharacterName.getGroupLimit(gMSB))) {
                      return false;
                  }
                  ++ m_groupIndex_; // continue with the next group
              }
              else if (startMSB > gMSB) {
                      // make sure that we start enumerating with the first group
                      // after start
                      m_groupIndex_ ++;
              }
              else {
                  int gMIN = UCharacterName.getGroupMin(gMSB);
                  if (gMIN > limit) {
                      gMIN = limit;
                  }
                  if (m_choice_ == UCharacterNameChoice.EXTENDED_CHAR_NAME) {
                      if (!iterateExtended(result, gMIN)) {
                          return false;
                      }
                  }
                  m_current_ = gMIN;
              }
          }
  
          return true;
      }
docs: Group name iteration, iterate all the names in the current 32-group and
  returns the first codepoint that has a valid name.
  @param result stores the result codepoint and name
  @param limit last codepoint + 1 in range to search
  @return false if a codepoint with a name is found in group and we can
  bail from further iteration, true to continue on with the
  iteration