if (key == null || isDelimiter(key.charAt(0))   || key.charAt(0) == doubleQuote || key.charAt(0) == singleQuote) break;
if (key != null && key.equals("/>")) { wellFormed = true; break; }
    private boolean readAttributes(Reader input)     throws IOException {      // just try to read Attributes once        if (attr_ready)	  return wellFormed && values != null;        attr_ready = true;        if (values == null && wellFormed) {            String key, token;            wellFormed = false;            attrs = new Vector();            values = new Hashtable();            while (true) {	      // check for valid value tag (or end delimiter)	      key = nextToken(input); 	      // close-Tag	      if (key != null && key.equals(closeTag)) {		wellFormed = true;		break;	      }	      // 'key'-part 	      if (key == null 		  || isDelimiter(key.charAt(0))		  // REVISE: keys ain't be quoted ??		  // so "href"="http://foo.bar" isn't allowed ?		  || key.charAt(0) == doubleQuote		  || key.charAt(0) == singleQuote)		break;                // now insure that we have an equals sign                token = nextToken(input);                if (token == null || token.charAt(0) != '=')		  break;                // read value of tag                token = nextToken(input);                if (token == null || isDelimiter(token.charAt(0)))                    break;		// strip quotes                if (token.charAt(0) == doubleQuote || token.charAt(0) == singleQuote)                     token = token.substring(1, token.length() - 1);                // store attribute name with original case                String upperCase = key.toUpperCase();                if (!values.containsKey(upperCase))                    attrs.addElement(key);                // store assignment in case-insensitive manner                values.put(upperCase, token);            }        }        return wellFormed && values != null;    }