Enthaelt alle Stellen an denen eine SAXParseException geworfen wird. 
Dazu noch, wie man wieder in HTML/XML aufsetzt. 


Grobe Einteilung: 
Solche Exceptions, die durch ein vorzeitiges Ende des Dokuments 
verursacht werden. 
Die haben per se kaum das Problem mit dem Wiederaufsetzen. 

readStringBuffer(
		    throw new SAXParseException
			("End of stream while scanning " 
			 + elementName + ". " 
			 + "Read so far: \"" 
			 + qName + "\". ", null);

readStringBuffer(
wird von parseAttribute fuer xml und html 
und von parseCommentElemTypeDecl() parseExtProcessingInstruction() benutzt. 
parseEndTag() parseStartOrStartEndTag()

"element name" ist nicht ganz der richtige Ausdruck: 
Eigentlich: auch attribute name, 
WHITESP_IN_ATTR
ATTR_VALUE
ATTR_NAME
PROC_INSTR
END_TAG
START_TAG

dieses Event kann nur hoechstens einmal geworfen werden. 
Problem: Eigentlich sollte da alle Info, die man bisher so gesammelt
hat uebermittelt werden -- das ist schwierig. 
Idee: 
Buffer austauschen gegen einen Dummy, der einfach alles sauber
abschliesst: 

WHITESP_IN_ATTR: fraglich !!!! koennte doch auch ein leeres Attribut
sein, je nachdem ob xmll oder html.. dann ...>eof
ATTR_VALUE: ..."> und dann eof. 
ATTR_NAME: ...="dummy"> und dann eof. 
PROC_INSTR: ...> und dann eof. 
END_TAG: .../> und dann eof. 
START_TAG ...> und dann eof. 


Aehnlich: 
parseCommentElemTypeDecl() 
		    throw new SAXParseException
			("End of stream while scanning comment . " 
			 + "Recently read: \"" + qName + "\". ", 
			 null);


was mich aber total wundert: 
- koennte doch auch eine ElemTypeDecl sein, oder? 
- WAS ist mit PI's?
Klar aber: Kein Problem mit normalem Text. 

















parseCommentElemTypeDecl() 
		throw new SAXParseException
		    ("Comments must start with \"<!--\" but found " 
		     + "\"<!-" + (char) SGMLParser.this.currChar + "\". ", 
		     null);



	public void parseAttribute(AttributesImpl attributes) 
		throw new SAXParseException
		    ("Missing value for attribute \"" 
		     + attName + "\". ", null);
	public void parseAttribute(AttributesImpl attributes) 
		throw new SAXParseException
		    ("Found nontrivial material \"" + qName 
		     + "\" between \"=\" and quote of attribute \""
		     + attName + "\". ", null);

    void parseStartOrStartEndTag() throws IOException, SAXException {
		throw new SAXParseException
		    ("Expected finishing tag \"" + qName 
		     + "\" with character '/' or '>' " 
		     + "but found '" + (char) this.currChar + "'. ", null);





ALMOST DONE: 


 addAttribute(
		throw new SAXParseException
		    ("Found multiple attribute \"" 
		     + attName + "\" with values \"" + attValue 
		     + "\" and \"" + oldAttValue + "\". ", null);

Naja: man koennte einfach auch die mehrfachen Attribute in der
AttributesImpl speichern. 
und zusaetzlich einen Event multiple Attribute absetzen. 
Alternativ koennte man auch vorangegangene Attribute ueberschreiben. 
Frage: Warum haengt da eine ListMap drunter, 
d.h. wieso spielt die Reihenfolge eine Rolle? 





COMPLETELY DONE

	public void parseExtProcessingInstruction() 
	    throws IOException, SAXException {
	    throw new SAXParseException
		("In html no processing instructions are allowed. ", null);
	}


    void parseStartOrStartEndTag() throws IOException, SAXException {
		    throw new SAXParseException
			("Strange end '" + (char) this.currChar 
			 + "' of empty-element-tag \"" + qName + "\". ", null);




    void parseStartOrStartEndTag() throws IOException, SAXException {
/*
  if (!Character.isLetter((char)this.currChar)) {
  throw new SAXException
  ("Found tag beginning with " + ((char)this.currChar) + 
  " where expected a letter. ");
  }
*/
