code: private void parseCp() throws Exception {
          if (tryRead('(')) {
              dataBufferAppend('(');
              parseElements(readBuffer);
          } else {
              dataBufferAppend(readNmtoken(true));
              char c = readCh();
              switch (c) {
                  case '?':
                  case '*':
                  case '+':
                      dataBufferAppend(c);
                      break;
                  default:
                      unread(c);
                      break;
              }
          }
      }
docs: Parse a content particle.
  
  <pre>
  [48] cp ::= (Name | choice | seq) ('?' | '*' | '+')?
  </pre>