readMarkupdecl();
readMarkupdecl(inExternalSubset);
  private void readMarkupdecl()    throws IOException, XMLStreamException  {    boolean saved = expandPE;    mark(1);    require('<');    reset();    expandPE = false;    if (tryRead(TEST_ELEMENT_DECL))      {        expandPE = saved;        readElementDecl();      }    else if (tryRead(TEST_ATTLIST_DECL))      {        expandPE = saved;        readAttlistDecl();      }    else if (tryRead(TEST_ENTITY_DECL))      {        expandPE = saved;        readEntityDecl();      }    else if (tryRead(TEST_NOTATION_DECL))      {        expandPE = saved;        readNotationDecl();      }    else if (tryRead(TEST_PI))      {        expandPE = saved;        readPI();      }    else if (tryRead(TEST_COMMENT))      {        expandPE = saved;        readComment();      }    else if (tryRead("<!["))      {        // conditional section        expandPE = saved;        if (inputStack.size() < 2)          error("conditional sections illegal in internal subset");        skipWhitespace();        if (tryRead("INCLUDE"))          {            skipWhitespace();            require('[');            skipWhitespace();            while (!tryRead("]]>"))              {                readMarkupdecl();                skipWhitespace();              }          }        else if (tryRead("IGNORE"))          {            skipWhitespace();            require('[');            expandPE = false;            for (int nesting = 1; nesting > 0; )              {                char c = readCh();                switch (c)                  {                  case '<':                    if (tryRead("!["))                      nesting++;                    break;                  case ']':                    if (tryRead("]>"))                      nesting--;                  }              }            expandPE = true;          }        else          error("conditional section must begin with INCLUDE or IGNORE");      }    else      error("expected markup declaration");  }