char c = readCh(); if (c == '>')
int c = readCh(); if (c == 0x3e)
  private void readDoctypeDecl()    throws IOException, XMLStreamException  {    if (!supportDTD)      error("parser was configured not to support DTDs");    requireWhitespace();    String rootName = readNmtoken(true);    skipWhitespace();    ExternalIds ids = readExternalIds(false, true);    doctype =      this.new Doctype(rootName, ids.publicId, ids.systemId);        // Parse internal subset first    skipWhitespace();    if (tryRead('['))      {        while (true)          {            expandPE = true;            skipWhitespace();            expandPE = false;            if (tryRead(']'))              break;            else              {                peIsError = expandPE = true;                readMarkupdecl(false);                peIsError = expandPE = false;              }          }      }    skipWhitespace();    require('>');    // Parse external subset    if (ids.systemId != null && externalEntities)      {        pushInput("", ">");        pushInput("[dtd]", ids);        // loop until we get back to ">"        while (true)          {            expandPE = true;            skipWhitespace();            expandPE = false;            mark(1);            char c = readCh();            if (c == '>')              break;            else if (c == '\uffff')              popInput();            else              {                reset();                //peIsError = expandPE = true;                expandPE = true;                readMarkupdecl(true);                //peIsError = expandPE = false;                expandPE = true;              }          }        if (inputStack.size() != 2)          error("external subset has unmatched '>'");        popInput();      }    // Make rootName available for reading    buf.setLength(0);    buf.append(rootName);  }