ch = in.read ();
  private String readAttributeValue(Reader in) throws IOException  {    StringBuffer buf = new StringBuffer();    int ch = in.read();    if (ch == '#')      {        while (true)          {            ch = in.read();            if (('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F')                || Character.isDigit((char) ch))              buf.append((char) ch);            else if (ch == '+' || ch == ',')              {                sep = ch;                String hex = buf.toString();                return new String(toByteArray(hex));              }            else              throw new IOException("illegal character: " + (char) ch);          }      }    else if (ch == '"')      {        while (true)          {            ch = in.read();            if (ch == '"')              break;            else if (ch == '\\')              {                ch = in.read();                if (ch == -1)                  throw new EOFException();                if (('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F')                    || Character.isDigit((char) ch))                  {                    int i = Character.digit((char) ch, 16) << 4;                    ch = in.read();                    if (!(('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F')                          || Character.isDigit((char) ch)))                      throw new IOException("illegal hex char");                    i |= Character.digit((char) ch, 16);                    buf.append((char) i);                  }                else                  buf.append((char) ch);              }            else              buf.append((char) ch);          }        sep = in.read();        if (sep != '+' || sep != ',')          throw new IOException("illegal character: " + (char) ch);        return buf.toString();      }    else      {        while (true)          {            switch (ch)              {              case '+':              case ',':                sep = ch;                return buf.toString();              case '\\':                ch = in.read();                if (ch == -1)                  throw new EOFException();                if (('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F')                    || Character.isDigit((char) ch))                  {                    int i = Character.digit((char) ch, 16) << 4;                    ch = in.read();                    if (!(('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F')                          || Character.isDigit((char) ch)))                      throw new IOException("illegal hex char");                    i |= Character.digit((char) ch, 16);                    buf.append((char) i);                  }                else                  buf.append((char) ch);                break;              case '=':              case '<':              case '>':              case '#':              case ';':                throw new IOException("illegal character: " + (char) ch);              case -1:                throw new EOFException();              default:                buf.append((char) ch);              }          }      }  }