int startIndex = recorder.getIndex();
for (Iterator i = list.iterator(); i.hasNext();) {
ElementOutput elementOutput = (ElementOutput)i.next();
Element element = elementOutput.getElement();
Output output = elementOutput.getOutput();
boolean elementNot = elementOutput.isNot();
if (this.caseSensitive != null) {
caseSensitive = this.caseSensitive.booleanValue();
}
if (elementOutput.isCaseSensitive() != null) {
caseSensitive = elementOutput.isCaseSensitive().booleanValue();
}
int bookmark = source.getBookmark();
boolean match = false;
if (output.receive()) {
if (receive) {
match = recorder.playMatch(element, source.getBookmark());
source.setBookmark(recorder.playBookmark());
} else {
output.init(source);
int mindex = recorder.reserveMatchIndex(level, element, source.getBookmark(), parentNot, elementNot);
int bindex = recorder.reserveBookmarkIndex();
match = element.parse(level, source, not|parentNot|elementNot, caseSensitive, false);
match = match != elementNot;
recorder.set(level, source, element, bookmark, source.getBookmark(), source.getBestIndex(), mindex, bindex, match, parentNot, elementNot);
output.set(source, bookmark);
}
} else {
if (receive) {
match = recorder.playMatch(element, source.getBookmark());
} else {
int mindex = recorder.reserveMatchIndex(level, element, source.getBookmark(), parentNot, elementNot);
match = element.parse(level, source, not|parentNot|elementNot, caseSensitive, false);
match = match != elementNot;
recorder.set(level, source, element, bookmark, source.getBookmark(), source.getBestIndex(), mindex, match, parentNot, elementNot);
}
}
if (match == not) {
if (!receive) {
recorder.setIndex(startIndex);
}
return false;
}
if (not) {
break;
}
if (elementNot) {
source.setBookmark(bookmark);
source.skipCharacter();
if (source.getBookmark() > bestMatchIdx) {
source.setBestIndex(source.getBookmark());
}
}
if (receive) {
if (elementNot) {
output.init(source);
output.set(source, bookmark);
} else {
source.setBookmark(bookmark);
output.init(source);
element.parse(level, source, not|parentNot|elementNot, caseSensitive, receive);
output.set(source, bookmark);
}
}
}
if (not) {