in wicket-core/src/main/java/org/apache/wicket/markup/AbstractMarkupParser.java [223:321]
private void parseMarkup()
{
try
{
// always remember the latest index (size)
int size = markup.size();
// Loop through tags
MarkupElement elem;
while (null != (elem = getNextTag()))
{
if (elem instanceof HtmlSpecialTag)
{
elem = new ComponentTag(((HtmlSpecialTag)elem).getXmlTag());
}
if (elem instanceof ComponentTag)
{
ComponentTag tag = (ComponentTag)elem;
boolean add = (tag.getId() != null);
if (!add && tag.isClose())
{
add = ((tag.getOpenTag() != null) && (tag.getOpenTag().getId() != null));
}
// Add tag to list?
if (add || tag.isModified() || (markup.size() != size))
{
// Add text from last position to the current tag position
CharSequence text = xmlParser.getInputFromPositionMarker(tag.getPos());
if (text.length() > 0)
{
text = handleRawText(text.toString());
// Make sure you add it at the correct location.
// IMarkupFilters might have added elements as well.
markup.addMarkupElement(size, new RawMarkup(text));
}
xmlParser.setPositionMarker();
if (add)
{
// Add to the markup unless the tag has been flagged as
// to be removed from the markup. (e.g. <wicket:remove>
if (tag.isIgnore() == false)
{
markup.addMarkupElement(tag);
}
}
else if (tag.isModified())
{
markup.addMarkupElement(new RawMarkup(tag.toCharSequence()));
}
else
{
xmlParser.setPositionMarker(tag.getPos());
}
}
// always remember the latest index (size)
size = markup.size();
}
}
}
catch (final ParseException ex)
{
// Add remaining input string
final CharSequence text = xmlParser.getInputFromPositionMarker(-1);
if (text.length() > 0)
{
markup.addMarkupElement(new RawMarkup(text));
}
markup.getMarkupResourceStream().setEncoding(xmlParser.getEncoding());
markup.getMarkupResourceStream().setDoctype(xmlParser.getDoctype());
final MarkupStream markupStream = new MarkupStream(markup);
markupStream.setCurrentIndex(markup.size() - 1);
throw new MarkupException(markupStream, ex.getMessage(), ex);
}
// Add tail?
CharSequence text = xmlParser.getInputFromPositionMarker(-1);
if (text.length() > 0)
{
text = handleRawText(text.toString());
// Make sure you add it at the correct location.
// IMarkupFilters might have added elements as well.
markup.addMarkupElement(new RawMarkup(text));
}
postProcess(markup);
// Make all tags immutable and the list of elements unmodifiable
markup.makeImmutable();
}