return list.iterator().hasNext();
}
public boolean parse(int level, Source source, boolean parentNot, boolean caseSensitive, boolean receive) {
level++;
Recorder recorder = source.getRecorder();
int bestMatchIdx = source.getBestIndex();
int startBookmark = source.getBookmark();
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) {