private final void parseStartTag() throws IOException {
		read(); // <
		mName = readName();
		mStack.add(mName);

		while (true) {
			String attrName;
			int ch;
			int pos;

			skip();
			ch = mPeek0;
			if (ch == '/') {
				mIsEmptyElementTag = true;
				read();
				skip();
				read('>');
				break;
			}
			if (ch == '>') {
				read();
				break;
			}
			if (ch == -1) {
				fail(UNEXPECTED_EOF);
			}

			attrName = readName();
			if (attrName.length() == 0) {
				fail("attribute name expected"); //$NON-NLS-1$
			}

			skip();
			read('=');
			skip();
			ch = read();
			if (ch != '\'' && ch != '"') {
				fail("<" + mName + ">: invalid delimiter: " + (char) ch); //$NON-NLS-1$ //$NON-NLS-2$
			}

			pos = mTextPos;
			pushText(ch);
			mAttributeMap.put(attrName, pop(pos));
			if (ch != ' ') {
				read(); // skip end quote
			}
		}
	}