[332295] [parser] Tags are not properly handled inside comment
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslator.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslator.java
index f79f43e..bf31f9f 100644
--- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslator.java
+++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslator.java
@@ -1577,7 +1577,7 @@
}
}
else {
- checkAllAttributeValueContainers(regions);
+ checkAllAttributeValueContainers(container,regions);
}
}
}
@@ -1588,15 +1588,23 @@
*
* @param regions
*/
- private void checkAllAttributeValueContainers(Iterator regions) {
+ private void checkAllAttributeValueContainers(ITextRegionCollection container, Iterator regions) {
// tag name is not jsp
// handle embedded jsp attributes...
ITextRegion embedded = null;
// Iterator attrRegions = null;
// ITextRegion attrChunk = null;
+ ITextRegion prevRegion = null;
while (regions.hasNext()) {
embedded = (ITextRegion) regions.next();
- if (embedded instanceof ITextRegionContainer) {
+ if (embedded.getType() == DOMRegionContext.XML_TAG_NAME || embedded.getType() == DOMJSPRegionContexts.JSP_DIRECTIVE_NAME) {
+ String fullTagName = container.getText(embedded);
+ if (fullTagName.indexOf(':') > -1 && !fullTagName.startsWith(JSP_PREFIX)) {
+ if (prevRegion != null)
+ addCustomTaglibVariables(fullTagName, container,prevRegion,-1); // it may be a custom tag
+ }
+ }
+ else if (embedded instanceof ITextRegionContainer) {
// parse out container
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=130606
@@ -1624,6 +1632,7 @@
// }
// }
}
+ prevRegion = embedded;
}
}
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 ca663e2..b2b4952 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
@@ -1,4 +1,4 @@
-/* The following code was generated by JFlex 1.2.2 on 10/29/10 4:24 PM */
+/* The following code was generated by JFlex 1.2.2 on 12/16/10 12:41 PM */
/*******************************************************************************
* Copyright (c) 2004, 2010 IBM Corporation and others.
@@ -36,7 +36,7 @@
/**
* This class is a scanner generated by
* <a href="http://www.informatik.tu-muenchen.de/~kleing/jflex/">JFlex</a> 1.2.2
- * on 10/29/10 4:24 PM from the specification file
+ * on 12/16/10 12:41 PM from the specification file
* <tt>file:/C:/dev/workspaces/indigo/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.jflex</tt>
*/
public class JSPTokenizer implements BlockTokenizer, DOMJSPRegionContexts {
@@ -1165,6 +1165,9 @@
// determine if a block tag scan is necessary
if (internalContext == XML_TAG_NAME) {
internalTagName = yytext();
+ if (endTagName != null && endTagName.length() == 0){
+ endTagName = internalTagName;
+ }
if(!isNestable(internalTagName)) {
internalTagName = null;
// snagged a tag name we shouldn't have
@@ -1453,16 +1456,27 @@
return searchContext;
}
// 4) XML tag
- else if(allowTag && checkJSPs && yy_currentPos > searchStringLength && yy_currentPos - searchStringLength != fLastInternalBlockStart &&
- yy_buffer[yy_currentPos - searchStringLength] == '<') {
- fLastInternalBlockStart = yy_markedPos = yy_currentPos - searchStringLength;
- yy_currentPos = yy_markedPos + 1;
- int resumeState = yystate();
- yybegin(ST_XML_TAG_NAME);
- if(yy_markedPos == yy_startRead) {
- String jspContext = primGetNextToken();
- yybegin(resumeState);
- return jspContext;
+ else if(allowTag && checkJSPs && yy_currentPos > searchStringLength && yy_buffer[yy_currentPos - searchStringLength] == '<') {
+ String buffer = String.copyValueOf(yy_buffer);
+ int jspSepIndex = buffer.indexOf(':',yy_currentPos );
+ if (jspSepIndex >= 0 ){
+ int endTagIndex = buffer.indexOf('>', jspSepIndex +1);
+ if (endTagIndex != -1 && (buffer.indexOf(searchString, jspSepIndex) != (endTagIndex -searchStringLength+1) )){
+ fLastInternalBlockStart = yy_markedPos = yy_currentPos - searchStringLength;
+ yy_currentPos = yy_markedPos + 1;
+ if(yy_markedPos == yy_startRead) {
+ int resumeState = yystate();
+ yybegin(ST_XML_TAG_NAME);
+ fStateStack.push(resumeState);
+ String jspContext = primGetNextToken();
+ yybegin(resumeState);
+ return jspContext;
+ }
+
+ return searchContext;
+ }
+
+
}
return searchContext;
}
@@ -3474,6 +3488,14 @@
{
if(Debug.debugTokenizer)
dump("\nstart tag open");//$NON-NLS-1$
+ if (!fStateStack.empty() && fStateStack.peek()== ST_XML_COMMENT){
+ fStateStack.pop();
+ fEmbeddedHint = XML_COMMENT_TEXT;
+ yybegin(ST_XML_TAG_NAME);
+ String tagName = "";
+ assembleEmbeddedTagSequence(XML_TAG_OPEN, tagName); // ?
+ return PROXY_CONTEXT;
+ }
fEmbeddedHint = XML_TAG_NAME;
fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
yybegin(ST_XML_TAG_NAME);
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 5ca0c2c..7c2bbe8 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
@@ -224,6 +224,9 @@
// determine if a block tag scan is necessary
if (internalContext == XML_TAG_NAME) {
internalTagName = yytext();
+ if (endTagName != null && endTagName.length() == 0){
+ endTagName = internalTagName;
+ }
if(!isNestable(internalTagName)) {
internalTagName = null;
// snagged a tag name we shouldn't have
@@ -512,16 +515,27 @@
return searchContext;
}
// 4) XML tag
- else if(allowTag && checkJSPs && yy_currentPos > searchStringLength && yy_currentPos - searchStringLength != fLastInternalBlockStart &&
- yy_buffer[yy_currentPos - searchStringLength] == '<') {
- fLastInternalBlockStart = yy_markedPos = yy_currentPos - searchStringLength;
- yy_currentPos = yy_markedPos + 1;
- int resumeState = yystate();
- yybegin(ST_XML_TAG_NAME);
- if(yy_markedPos == yy_startRead) {
- String jspContext = primGetNextToken();
- yybegin(resumeState);
- return jspContext;
+ else if(allowTag && checkJSPs && yy_currentPos > searchStringLength && yy_buffer[yy_currentPos - searchStringLength] == '<') {
+ String buffer = String.copyValueOf(yy_buffer);
+ int jspSepIndex = buffer.indexOf(':',yy_currentPos );
+ if (jspSepIndex >= 0 ){
+ int endTagIndex = buffer.indexOf('>', jspSepIndex +1);
+ if (endTagIndex != -1 && (buffer.indexOf(searchString, jspSepIndex) != (endTagIndex -searchStringLength+1) )){
+ fLastInternalBlockStart = yy_markedPos = yy_currentPos - searchStringLength;
+ yy_currentPos = yy_markedPos + 1;
+ if(yy_markedPos == yy_startRead) {
+ int resumeState = yystate();
+ yybegin(ST_XML_TAG_NAME);
+ fStateStack.push(resumeState);
+ String jspContext = primGetNextToken();
+ yybegin(resumeState);
+ return jspContext;
+ }
+
+ return searchContext;
+ }
+
+
}
return searchContext;
}
@@ -1399,6 +1413,14 @@
<YYINITIAL, ST_XML_TAG_NAME, ST_XML_EQUALS, ST_XML_ATTRIBUTE_NAME, ST_XML_DECLARATION, ST_JSP_DIRECTIVE_NAME, ST_JSP_DIRECTIVE_NAME_WHITESPACE, ST_JSP_DIRECTIVE_ATTRIBUTE_NAME, ST_JSP_DIRECTIVE_EQUALS, ST_JSP_DIRECTIVE_ATTRIBUTE_VALUE> {genericTagOpen} {
if(Debug.debugTokenizer)
dump("\nstart tag open");//$NON-NLS-1$
+ if (!fStateStack.empty() && fStateStack.peek()== ST_XML_COMMENT){
+ fStateStack.pop();
+ fEmbeddedHint = XML_COMMENT_TEXT;
+ yybegin(ST_XML_TAG_NAME);
+ String tagName = "";
+ assembleEmbeddedTagSequence(XML_TAG_OPEN, tagName); // ?
+ return PROXY_CONTEXT;
+ }
fEmbeddedHint = XML_TAG_NAME;
fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
yybegin(ST_XML_TAG_NAME);