case '\t':
case 0x09:
  private String readLiteral(int flags)    throws IOException, XMLStreamException  {    boolean saved = expandPE;    char delim = readCh();    if (delim != '\'' && delim != '"')      error("expected '\"' or \"'\"", new Character(delim));    literalBuf.setLength(0);    if ((flags & LIT_DISABLE_PE) != 0)      expandPE = false;    boolean entities = false;    int inputStackSize = inputStack.size();    do      {        char c = literalReadCh();        if (c == delim && inputStackSize == inputStack.size())          break;        switch (c)          {          case '\n':          case '\r':            if ((flags & (LIT_ATTRIBUTE | LIT_PUBID)) != 0)              c = ' '; // normalize to space            break;          case '\t':            if ((flags & LIT_ATTRIBUTE) != 0)              c = ' '; // normalize to space            break;          case '&':            mark(2);            c = readCh();            if (c == '#')              {                if ((flags & LIT_DISABLE_CREF) != 0)                  {                    reset();                    c = '&';                  }                else                  {                mark(1);                c = readCh();                boolean hex = (c == 'x');                if (!hex)                  reset();                char[] ref = readCharacterRef(hex ? 16 : 10);                for (int i = 0; i < ref.length; i++)                  {                    c = ref[i];                    if ((flags & (LIT_ATTRIBUTE | LIT_PUBID)) != 0 &&                        (c == '\n' || c == '\r'))                      c = ' '; // normalize                    else if ((flags & LIT_ATTRIBUTE) != 0 && c == '\t')                      c = ' '; // normalize                        literalBuf.append(c);                  }                entities = true;                continue;              }              }            else              {                if ((flags & LIT_DISABLE_EREF) != 0)                  {                    reset();                    c = '&';                  }                else                  {                reset();                if (replaceERefs || (flags & LIT_NORMALIZE) > 0)                  {                    String entityName = readNmtoken(true);                    require(';');                        String text =                          (String) PREDEFINED_ENTITIES.get(entityName);                    if (text != null)                          literalBuf.append(text);                    else                          expandEntity(entityName,                                       (flags & LIT_ATTRIBUTE) != 0);                    entities = true;                    continue;                  }                else                  error("parser is configured not to replace entity " +                        "references");              }              }            break;          case '<':            if ((flags & LIT_ATTRIBUTE) != 0)              error("attribute values may not contain '<'");            break;          case '\uffff':            if (inputStack.size() > 1)              {                popInput();                continue;          }            throw new EOFException();      }        literalBuf.append(c);      }    while (true);    expandPE = saved;    if (entities)      normalizeCRLF(literalBuf);    if ((flags & LIT_NORMALIZE) > 0)      literalBuf = normalize(literalBuf);    return literalBuf.toString();  }