[86382] fixes for XML-JSP translation, as well as some more unit tests for the fixes
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 450be4e..ba0dc5a 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
@@ -566,7 +566,7 @@
 
 	/**
 	 * Only valid after a configure(...), translate(...) or
-	 * translateFromFile(...) call
+	 * translateFromFile(...) call	
 	 * 
 	 * @return the current result (java translation) buffer
 	 */
@@ -664,8 +664,8 @@
 			if (getCurrentNode().getType() == DOMRegionContext.XML_COMMENT_TEXT || getCurrentNode().getType() == DOMRegionContext.XML_CDATA_TEXT || getCurrentNode().getType() == DOMRegionContext.UNDEFINED) {
 				translateXMLCommentNode(getCurrentNode());
 			}
-			else // iterate through each region in the flat node
-			{
+			else {
+				// iterate through each region in the flat node
 				translateRegionContainer(getCurrentNode(), STANDARD_JSP);
 			}
 			if (getCurrentNode() != null)
@@ -890,8 +890,7 @@
 								else if (directiveName.equals("include")) { //$NON-NLS-1$
 
 									String fileLocation = ""; //$NON-NLS-1$
-									String attrValue = ""; //$NON-NLS-1$
-
+									
 									// skip to required "file" attribute,
 									// should be safe because
 									// "file" is the only attribute for the
@@ -899,8 +898,8 @@
 									while (r != null && regions.hasNext() && !r.getType().equals(DOMRegionContext.XML_TAG_ATTRIBUTE_NAME)) {
 										r = (ITextRegion) regions.next();
 									}
-									attrValue = getAttributeValue(r, regions);
-									if (attrValue != null)
+									fileLocation = getAttributeValue(r, regions);
+									if (fileLocation != null)
 										handleIncludeFile(fileLocation);
 								}
 								else if (directiveName.equals("page")) { //$NON-NLS-1$
@@ -993,19 +992,19 @@
 			sdr = sdr.getNext();
 		}
 		
+		advanceNextNode();
+		
 		switch(type) {
 			case SCRIPTLET:
-				translateScriptletString(content.toString(), getCurrentNode(), start, end);
+				translateScriptletString(content.toString(), getCurrentNode(), start, end-start);
 				break;
 			case EXPRESSION:
-				translateExpressionString(content.toString(), getCurrentNode(), start, end);
+				translateExpressionString(content.toString(), getCurrentNode(), start, end-start);
 				break;
 			case DECLARATION:
-				translateDeclarationString(content.toString(), getCurrentNode(), start, end);
+				translateDeclarationString(content.toString(), getCurrentNode(), start, end-start);
 				break;
 		}
-		
-		advanceNextNode();
 	}
 
 	/**
@@ -1993,8 +1992,8 @@
 			String suffix = "null;" + ENDL; //$NON-NLS-1$
 			if (className != null)
 				suffix = "new " + className + "();" + ENDL; //$NON-NLS-1$ //$NON-NLS-2$
-			IStructuredDocumentRegion referenceRegion = fCurrentNode.getPrevious() != null ? fCurrentNode.getPrevious() : fCurrentNode;
-			appendToBuffer(prefix + suffix, fUserCode, true, referenceRegion);
+
+			appendToBuffer(prefix + suffix, fUserCode, true, fCurrentNode);
 		}
 	}
 
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/XMLJSPRegionHelper.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/XMLJSPRegionHelper.java
index 3efbbd5..8def042 100644
--- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/XMLJSPRegionHelper.java
+++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/XMLJSPRegionHelper.java
@@ -126,10 +126,7 @@
 	 * determines which type of region the cursor is in, and adjusts cursor offset accordingly 
 	 */
 	public void nodeParsed(IStructuredDocumentRegion sdRegion) {
-		//				System.out.println("tagname > " + fTagname);
-		//				System.out.println("sdRegion > " + sdRegion.getType());
-		//				System.out.println("sdRegion text is >> " + fTextToParse.substring(sdRegion.getStartOffset(), sdRegion.getEndOffset()));
-		//				System.out.println("+++=======================");
+
 		try {
 			if (isJSPStartRegion(sdRegion)) {
 				String nameStr = getRegionName(sdRegion);
@@ -138,7 +135,7 @@
 				else
 					fTagname = null;
 			}
-			else if (sdRegion.getFirstRegion().getType() == DOMJSPRegionContexts.JSP_CONTENT) {
+			else if (sdRegion.getFirstRegion().getType() == DOMJSPRegionContexts.JSP_CONTENT || sdRegion.getFirstRegion().getType() == DOMRegionContext.XML_CONTENT) {
 				if (fTagname != null) {
 					// assign contents to one of the tables
 					if (isScriptlet(fTagname)) {
@@ -151,16 +148,19 @@
 						processDeclaration(sdRegion);
 					}
 					else {
-						processOtherRegions(sdRegion);
+						if (fTagname != null) {
+							processUseBean(sdRegion);
+							processOtherRegions(sdRegion);
+						}
 					}
 				}
 			}
-			else if (sdRegion.getFirstRegion().getType() == DOMRegionContext.XML_CONTENT) {
-				if (fTagname != null) {
-					processUseBean(sdRegion);
-					processOtherRegions(sdRegion);
-				}
-			}
+//			else if (sdRegion.getFirstRegion().getType() == DOMRegionContext.XML_CONTENT) {
+//				if (fTagname != null) {
+//					processUseBean(sdRegion);
+//					processOtherRegions(sdRegion);
+//				}
+//			}
 			else {
 				fTagname = null;
 			}
diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/reconcile/ReconcileStepForJspTranslation.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/reconcile/ReconcileStepForJspTranslation.java
index fc6381e..2369813 100644
--- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/reconcile/ReconcileStepForJspTranslation.java
+++ b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/reconcile/ReconcileStepForJspTranslation.java
@@ -222,14 +222,14 @@
 			r = regions.get(i);
 			if (r.getType() == DOMJSPRegionContexts.JSP_DIRECTIVE_NAME || r.getType() == DOMRegionContext.XML_TAG_NAME) {
 				tagName = sdRegion.getText(r).trim();
-				if (tagName.equals("include")) { //$NON-NLS-1$
+				if (tagName.equals("include") || tagName.equals("jsp:directive.include")) { //$NON-NLS-1$ //$NON-NLS-2$
 					adjustForInclude(annotation, pos, sdRegion, regions, i);
 				}
-				else if (tagName.equals("page")) { //$NON-NLS-1$
+				else if (tagName.equals("page") || tagName.equals("jsp:directive.page")) { //$NON-NLS-1$  //$NON-NLS-2$
 					adjustForPage(annotation, pos, sdRegion, regions, i);
 				}
 				else if (tagName.equals("jsp:useBean")) { //$NON-NLS-1$
-					//adjustForUseBean(pos, sdRegion, regions, i);
+					adjustForUseBean(pos, sdRegion, regions, i);
 					// do nothing for usebean for now...
 					break;
 				}
@@ -290,6 +290,27 @@
 		}
 	}
 
+	private void adjustForUseBean(Position pos, IStructuredDocumentRegion sdRegion, ITextRegionList regions, int startingRegionNumber) {
+		ITextRegion r;
+		String value;
+		int size = regions.size();
+
+		for (int j = startingRegionNumber; j < size; j++) {
+			r = regions.get(j);
+			if (r.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME && sdRegion.getText(r).trim().equals("id")) { //$NON-NLS-1$
+				if (size > j + 2) {
+					r = regions.get(j + 2);
+					if (r.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE) {
+						value = sdRegion.getText(r);
+						pos.offset = sdRegion.getStartOffset(r);
+						pos.length = value.trim().length();
+						break;
+					}
+				}
+			}
+		}
+	}
+	
 	public void release() {
 		if (fTranslationAdapter != null) {
 			if(DEBUG) {