[326550] Attribute value parsed incorrectly in a jsp
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/parser/internal/JSPTokenizer.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/parser/internal/JSPTokenizer.java
index dfa69ac..0b27830 100644
--- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/parser/internal/JSPTokenizer.java
+++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/parser/internal/JSPTokenizer.java
@@ -1218,18 +1218,18 @@
Logger.logException(f);
}
boolean isEndingType = yystate() == ST_ABORT_EMBEDDED;
+ ITextRegionList embeddedList = fEmbeddedContainer.getRegions();
if(!isEndingType) {
// check for ending context
if (endTagName == null) {
for (int i = 0; i < endTypes.length; i++) {
- isEndingType = isEndingType || (internalContext == endTypes[i]);
+ isEndingType = isEndingType || (internalContext == endTypes[i]) || (embeddedList.size() >=2 && (embeddedList.get(embeddedList.size()-1)).getType() == endTypes[i]);
}
}
else {
isEndingType = ((isInEndTag && internalContext == XML_TAG_CLOSE) || (isInFirstTag && internalContext == XML_EMPTY_TAG_CLOSE)) && internalTagName != null && internalTagName.equals(endTagName);
}
}
- ITextRegionList embeddedList = fEmbeddedContainer.getRegions();
notFinished = notFinished && ((!isEndingType) && !isEOF() && (endTagName != null || internalContext != UNDEFINED) && !(internalContext == PROXY_CONTEXT && (embeddedList.get(embeddedList.size()-1)).getType() == UNDEFINED));
}
// finish adding the last context
@@ -3392,8 +3392,15 @@
dump("inappropriate tag name");//$NON-NLS-1$
if(!fStateStack.empty() && (fStateStack.peek()==ST_XML_ATTRIBUTE_VALUE_SQUOTED||fStateStack.peek()==ST_XML_ATTRIBUTE_VALUE_DQUOTED)) {
yybegin(ST_ABORT_EMBEDDED);
- //yypushback(yylength()-1);
- return UNDEFINED;
+ char c = yy_buffer[yy_markedPos - 1];
+ if (fStateStack.peek()==ST_XML_ATTRIBUTE_VALUE_DQUOTED && c == '\"') {
+ return XML_TAG_ATTRIBUTE_VALUE_DQUOTE;
+ }
+ if (fStateStack.peek()==ST_XML_ATTRIBUTE_VALUE_SQUOTED && c == '\'') {
+ return XML_TAG_ATTRIBUTE_VALUE_SQUOTE;
+ }
+ yypushback(yylength()-1);
+ return XML_TAG_ATTRIBUTE_VALUE;
}
yybegin(YYINITIAL);
return XML_CONTENT;
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.jflex b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.jflex
index dbae01f..8bd4baa 100644
--- a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.jflex
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.jflex
@@ -277,18 +277,18 @@
Logger.logException(f);
}
boolean isEndingType = yystate() == ST_ABORT_EMBEDDED;
+ ITextRegionList embeddedList = fEmbeddedContainer.getRegions();
if(!isEndingType) {
// check for ending context
if (endTagName == null) {
for (int i = 0; i < endTypes.length; i++) {
- isEndingType = isEndingType || (internalContext == endTypes[i]);
+ isEndingType = isEndingType || (internalContext == endTypes[i]) || (embeddedList.size() >=2 && (embeddedList.get(embeddedList.size()-1)).getType() == endTypes[i]);
}
}
else {
isEndingType = ((isInEndTag && internalContext == XML_TAG_CLOSE) || (isInFirstTag && internalContext == XML_EMPTY_TAG_CLOSE)) && internalTagName != null && internalTagName.equals(endTagName);
}
}
- ITextRegionList embeddedList = fEmbeddedContainer.getRegions();
notFinished = notFinished && ((!isEndingType) && !isEOF() && (endTagName != null || internalContext != UNDEFINED) && !(internalContext == PROXY_CONTEXT && (embeddedList.get(embeddedList.size()-1)).getType() == UNDEFINED));
}
// finish adding the last context
@@ -1621,8 +1621,15 @@
dump("inappropriate tag name");//$NON-NLS-1$
if(!fStateStack.empty() && (fStateStack.peek()==ST_XML_ATTRIBUTE_VALUE_SQUOTED||fStateStack.peek()==ST_XML_ATTRIBUTE_VALUE_DQUOTED)) {
yybegin(ST_ABORT_EMBEDDED);
- //yypushback(yylength()-1);
- return UNDEFINED;
+ char c = yy_buffer[yy_markedPos - 1];
+ if (fStateStack.peek()==ST_XML_ATTRIBUTE_VALUE_DQUOTED && c == '\"') {
+ return XML_TAG_ATTRIBUTE_VALUE_DQUOTE;
+ }
+ if (fStateStack.peek()==ST_XML_ATTRIBUTE_VALUE_SQUOTED && c == '\'') {
+ return XML_TAG_ATTRIBUTE_VALUE_SQUOTE;
+ }
+ yypushback(yylength()-1);
+ return XML_TAG_ATTRIBUTE_VALUE;
}
yybegin(YYINITIAL);
return XML_CONTENT;