int headDepth = 0;
int bodyDepth = 0;
for (Item i : originalItems) {
if (i instanceof Tag) {
Tag tag = (Tag) i;
if (wasHead == false && (isHead(tag) || "body".equals(tag.getName()))) {
Map<String, String> emptyMap = Collections.emptyMap();
result.add(new SimpleTag("head", Tag.Type.OPEN, emptyMap));
result.addAll(headContent);
result.add(new SimpleTag("head", Tag.Type.CLOSE, null));
if ("body".equals(tag.getName())) {
bodyDepth++;
result.add(tag);
}
wasHead = true;
if (isHead(tag) && (tag.getType() == Tag.Type.OPEN)) {
++headDepth;
}
continue;
}
if ("body".equals(tag.getName())) {
if (tag.getType() == Tag.Type.OPEN) {
if (bodyDepth == 0) {
result.add(tag);
}
++bodyDepth;
} else if (tag.getType() == Tag.Type.CLOSE) {
--bodyDepth;
if (bodyDepth == 0) {
result.add(tag);
}
}
continue;
}
if (isHead(tag)) {
if (tag.getType() == Tag.Type.OPEN) {
++headDepth;
} else if (tag.getType() == Tag.Type.CLOSE) {
if (headDepth > 0) {
--headDepth;
}
}
continue;