public void finishTag() throws TagParserException
		{
			// System.out.print("NT"+this.mLD());
			
			TagNode container = this.containerStack.peek();
			TagNode tag = this.temporaryTag;
			
			// Parse the Attributes if there are any.
			if(this.literalBuffer.length() > 0)
			{
				// Though before we do so,check if there is a '/' at the end of the literal-buffer.
				if(this.literalBuffer.charAt(this.literalBuffer.length()-1) == '/')
				{
					// There IS a '/' at the end of the buffer. Cut it away and add it to the typeName of the current Tag.
					tag.typeName += '/';
					this.literalBuffer.setLength(this.literalBuffer.length()-1);
				}
				
				// Now parse the attributes
				tag.addAttributes(this.transformAttributes(this.literalBuffer.toString()));
			}
			
			// Determine the Tag-Type.
			tag.tagType = this.determineTagType(tag, container);
			
			// Depending on the Type of the Tag, we will either...
			//    POP the current container from the containerStack, ignoring this Tag as 'end'-tag. But only if the current container has the same name!
			//    PUSH this tag as an 'start'-tag onto the containerStack.
			//    ADD this tag to the container as a 'single'-tag.
			//
			// By doing this, we can easily create a tag-tree while parsing, without doing multiple passes of the data.
			switch(tag.tagType)
			{
			case 0: // START-TAG
				container.addChild(tag);
				this.containerStack.push(tag);
				this.temporaryTag = null;
				break;
				
			case 1: // END-TAG
				this.containerStack.pop();
				this.temporaryTag = null;
				break;
				
			case 2: // SINGLE-TAG
				container.addChild(tag);
				this.temporaryTag = null;
				break;
				
				// This should NOT happen.
			case -1: default:
				throw this.makeException("TagType unresolved or unknown: " + tag.tagType);
			}
			
			// Clear the literal-buffer to parse the next literal.
			this.literalBuffer.setLength(0);
		}