return false;
}
String contents = analysis.getContents();
int level = 0;
boolean result = false;
PageElementTag level0Tag = null;
int tagIndex = 0;
while (tagIndex < tags.size()) {
PageElementTag tag = tags.get(tagIndex);
tagIndex++;
if (tag.isFullTag()) {
// Full tag
if (level > 0) {
if (errors == null) {
return true;
}
result = true;
CheckErrorResult errorResult = createCheckErrorResult(
analysis,
tag.getBeginIndex(), tag.getEndIndex());
errorResult.addReplacement("");
errors.add(errorResult);
}
} else if (tag.isEndTag()) {
// Closing tag
level--;
if (level < 0) {
level = 0;
if (errors == null) {
return true;
}
result = true;
CheckErrorResult errorResult = createCheckErrorResult(
analysis,
tag.getBeginIndex(), tag.getEndIndex());
errorResult.addReplacement("");
errors.add(errorResult);
}
} else {
if (level == 0) {
level0Tag = tag;
} else if (level > 0) {
if (errors == null) {
return true;
}
result = true;
// Manage double small tags on the same text
boolean doubleSmall = false;
if ((tag.getMatchingTag() != null) &&
(level0Tag != null) &&
(level0Tag.getMatchingTag() != null)) {
if ((level0Tag.getEndIndex() == tag.getBeginIndex()) &&
(tag.getMatchingTag().getEndIndex() == level0Tag.getMatchingTag().getBeginIndex())) {
doubleSmall = true;
}
}
if (level0Tag != null) {
int possibleEnd = getPossibleEnd(analysis, level0Tag);
if (possibleEnd > 0) {
CheckErrorResult errorResult = createCheckErrorResult(
analysis,
level0Tag.getBeginIndex(), possibleEnd,
ErrorLevel.WARNING);
errorResult.addReplacement(
contents.substring(level0Tag.getBeginIndex(), possibleEnd) + "</small>",
"<small>...</small>");
errors.add(errorResult);
} else {
CheckErrorResult errorResult = createCheckErrorResult(
analysis,
level0Tag.getBeginIndex(),
level0Tag.getEndIndex(),
ErrorLevel.CORRECT);
errors.add(errorResult);
if (level0Tag.getMatchingTag() != null) {
errorResult = createCheckErrorResult(
analysis,
level0Tag.getMatchingTag().getBeginIndex(),
level0Tag.getMatchingTag().getEndIndex(),
ErrorLevel.CORRECT);
errors.add(errorResult);
}
}
level0Tag = null;
}
int possibleEnd = getPossibleEnd(analysis, tag);
if (possibleEnd > 0) {
CheckErrorResult errorResult = createCheckErrorResult(
analysis, tag.getBeginIndex(), possibleEnd);
errorResult.addReplacement(
contents.substring(tag.getBeginIndex(), possibleEnd) + "</small>",
"<small>...</small>");
errors.add(errorResult);
} else {
CheckErrorResult errorResult = createCheckErrorResult(
analysis,
tag.getCompleteBeginIndex(),
tag.getCompleteEndIndex());
if (doubleSmall) {
errorResult.addReplacement(
contents.substring(tag.getEndIndex(), tag.getMatchingTag().getBeginIndex()),
GT._("Remove <small> tags"));
}
if (!tag.isComplete() && !tag.isFullTag() && !tag.isEndTag()) {
errorResult.addReplacement(
PageElementTag.createTag(PageElementTag.TAG_HTML_SMALL, true, false));
}
errors.add(errorResult);
if (tag.isComplete()) {
tagIndex = PageElementTag.getMatchingTagIndex(tags, tagIndex);
}
}
}
level++;