} else if (component.hasCharacters()) {
cursor.characters(component.getCharacters());
} else if (component.hasDeleteCharacters()) {
cursor.deleteCharacters(component.getDeleteCharacters());
} else if (component.hasElementStart()) {
ElementStart elementStart = component.getElementStart();
cursor.elementStart(elementStart.getType(), attributesFrom(elementStart));
} else if (component.hasElementEnd()) {
if (!component.getElementEnd()) {
throw new DelayedInvalidInputException("Element end present but false: " +
provider.getContent());
}
cursor.elementEnd();
} else if (component.hasDeleteElementStart()) {
ElementStart elementStart = component.getDeleteElementStart();
cursor.deleteElementStart(elementStart.getType(), attributesFrom(elementStart));
} else if (component.hasDeleteElementEnd()) {
if (!component.getDeleteElementEnd()) {
throw new DelayedInvalidInputException("Delete element end present but false: " + provider);
}
cursor.deleteElementEnd();