code: private void readInternalSubset() throws IOException, KriptonRuntimeException {
  		read('[');
  
  		while (true) {
  			skip();
  			if (peekCharacter() == ']') {
  				position++;
  				return;
  			}
  
  			int declarationType = peekType(true);
  			switch (declarationType) {
  			case ELEMENTDECL:
  				readElementDeclaration();
  				break;
  
  			case ATTLISTDECL:
  				readAttributeListDeclaration();
  				break;
  
  			case ENTITYDECL:
  				readEntityDeclaration();
  				break;
  
  			case NOTATIONDECL:
  				readNotationDeclaration();
  				break;
  
  			case PROCESSING_INSTRUCTION:
  				read(START_PROCESSING_INSTRUCTION);
  				readUntil(END_PROCESSING_INSTRUCTION, false);
  				break;
  
  			case COMMENT:
  				readComment(false);
  				break;
  
  			case PARAMETER_ENTITY_REF:
  				throw new KriptonRuntimeException("Parameter entity references are not supported", true, this.getLineNumber(), this.getColumnNumber(), getPositionDescription(), null);
  
  			default:
  				throw new KriptonRuntimeException("Unexpected token", true, this.getLineNumber(), this.getColumnNumber(), getPositionDescription(), null);
  			}
  		}
  	}
docs: Read internal subset.
  
  @throws IOException Signals that an I/O exception has occurred.
  @throws KriptonRuntimeException the kripton runtime exception