[212927] "dynamic-attributes" missing from WTP 2.0's JSP tag file support
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/JSP20ElementCollection.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/JSP20ElementCollection.java
index d2e1be8..3ca1dad 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/JSP20ElementCollection.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/JSP20ElementCollection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -77,6 +77,15 @@
 				case Ids.ID_DIRECTIVE_TAGLIB :
 					createForDirTaglib();
 					break;
+				case Ids.ID_DIRECTIVE_PAGE :
+					createForDirPage();
+					break;
+				case Ids.ID_ROOT :
+					createForRoot();
+					break;
+				case Ids.ID_PLUGIN :
+					createForPlugin();
+					break;
 				default :
 					super.getDeclarations(eid);
 			}
@@ -87,13 +96,13 @@
 		}
 
 		private void createForOutput() {
-			AttrDecl adec = new AttrDecl(JSP20Namespace.ElementName.OUTPUT);
+			AttrDecl adec = new AttrDecl(JSP20Namespace.ATTR_NAME_OMIT_XML_DECL);
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.ENUM);
 			String[] values = {ATTR_VALUE_TRUE, ATTR_VALUE_FALSE, JSP20Namespace.ATTR_VALUE_YES, JSP20Namespace.ATTR_VALUE_NO};
 			adec.type.setEnumValues(values);
 			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, JSP20Namespace.ATTR_VALUE_NO);
 			adec.usage = CMAttributeDeclaration.OPTIONAL;
-			declarations.putNamedItem(JSP20Namespace.ElementName.OUTPUT, adec);
+			declarations.putNamedItem(JSP20Namespace.ATTR_NAME_OMIT_XML_DECL, adec);
 
 			adec = new AttrDecl(JSP20Namespace.ATTR_NAME_DOCTYPE_ROOT_ELEMENT);
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
@@ -134,6 +143,82 @@
 			declarations.putNamedItem(ATTR_NAME_PREFIX, adec);
 		}
 		
+		void createForDirPage() {
+			AttrDecl adec = null;
+			// ("language" CDATA DECLARED "java")
+			adec = new AttrDecl(ATTR_NAME_LANGUAGE);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_JAVA);
+			declarations.putNamedItem(ATTR_NAME_LANGUAGE, adec);
+
+			// ("extends" CDATA IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_EXTENDS);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			declarations.putNamedItem(ATTR_NAME_EXTENDS, adec);
+
+			// ("import" CDATA IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_IMPORT);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			declarations.putNamedItem(ATTR_NAME_IMPORT, adec);
+
+			// ("session" ENUM DECLARED (true|false) "true")
+			adec = createBoolType(ATTR_NAME_SESSION, ATTR_VALUE_TRUE);
+			if (adec != null)
+				declarations.putNamedItem(ATTR_NAME_SESSION, adec);
+
+			// ("buffer" CDATA DECLARED "8kb")
+			adec = new AttrDecl(ATTR_NAME_BUFFER);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_BUFSIZ_DEFAULT);
+			declarations.putNamedItem(ATTR_NAME_BUFFER, adec);
+
+			// ("autoFlush" ENUM DECLARED (true|false) "true")
+			adec = createBoolType(ATTR_NAME_AUTOFLUSH, ATTR_VALUE_TRUE);
+			if (adec != null)
+				declarations.putNamedItem(ATTR_NAME_AUTOFLUSH, adec);
+
+			// ("isThreadSafe" ENUM DECLARED (true|false) "true")
+			adec = createBoolType(ATTR_NAME_IS_THREAD_SAFE, ATTR_VALUE_TRUE);
+			if (adec != null)
+				declarations.putNamedItem(ATTR_NAME_IS_THREAD_SAFE, adec);
+
+			// ("info" CDATA IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_INFO);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			declarations.putNamedItem(ATTR_NAME_INFO, adec);
+
+			// ("errorPage" URI IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_ERROR_PAGE);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.URI);
+			declarations.putNamedItem(ATTR_NAME_ERROR_PAGE, adec);
+
+			// ("isErrorPage" ENUM DECLARED (true|false) "false")
+			adec = createBoolType(ATTR_NAME_IS_ERROR_PAGE, ATTR_VALUE_FALSE);
+			if (adec != null)
+				declarations.putNamedItem(ATTR_NAME_IS_ERROR_PAGE, adec);
+
+			// ("contentType" CDATA DECLARED "text/html; ISO-8859-1")
+			adec = new AttrDecl(ATTR_NAME_CONTENT_TYPE);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_CT_DEFAULT);
+			declarations.putNamedItem(ATTR_NAME_CONTENT_TYPE, adec);
+
+			// ("pageEncoding" CDATA IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_PAGE_ENCODING);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, JSP20Namespace.ATTR_VALUE_ENCODING_DEFAULT);
+			declarations.putNamedItem(ATTR_NAME_PAGE_ENCODING, adec);
+
+			// ("isELIgnored" ENUM DECLARED (true|false) "false")
+			adec = new AttrDecl(JSP20Namespace.ATTR_NAME_ISELIGNORED);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] values = new String[]{ATTR_VALUE_TRUE, ATTR_VALUE_FALSE};
+			adec.type.setEnumValues(values);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_FALSE);
+			adec.usage = CMAttributeDeclaration.OPTIONAL;
+			declarations.putNamedItem(JSP20Namespace.ATTR_NAME_ISELIGNORED, adec);
+		}
+		
 		private void createForElement() {
 			AttrDecl adec = new AttrDecl(ATTR_NAME_NAME);
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
@@ -151,10 +236,106 @@
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.ENUM);
 			String[] values = {ATTR_VALUE_TRUE, ATTR_VALUE_FALSE};
 			adec.type.setEnumValues(values);
-			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_FALSE);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_TRUE);
 			adec.usage = CMAttributeDeclaration.OPTIONAL;
 			declarations.putNamedItem(JSP20Namespace.ATTR_NAME_TRIM, adec);
 		}
+		
+		private void createForRoot() {
+			// ("xmlns:jsp" CDATA "http://java.sun.com/JSP/Page")
+			AttrDecl adec = new AttrDecl(ATTR_NAME_XMLNS_JSP);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_XMLNS_JSP);
+			declarations.putNamedItem(ATTR_NAME_XMLNS_JSP, adec);
+			// ("version" CDATA REQUIRED)
+			adec = new AttrDecl(ATTR_NAME_VERSION);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, JSP20Namespace.ATTR_VALUE_JSP_VER_20);
+			adec.usage = CMAttributeDeclaration.REQUIRED;
+			declarations.putNamedItem(ATTR_NAME_VERSION, adec);
+		}
+		
+		private void createForPlugin() {
+			// ("type" ENUM REQUIRED (bean|applet))
+			AttrDecl adec = new AttrDecl(ATTR_NAME_TYPE);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			adec.usage = CMAttributeDeclaration.REQUIRED;
+			String[] values = {ATTR_VALUE_BEAN, ATTR_VALUE_APPLET};
+			adec.type.setEnumValues(values);
+			declarations.putNamedItem(ATTR_NAME_TYPE, adec);
+
+			// ("code" CDATA REQUIRED)
+			adec = new AttrDecl(ATTR_NAME_CODE);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.URI);
+			adec.usage = CMAttributeDeclaration.REQUIRED;
+			declarations.putNamedItem(ATTR_NAME_CODE, adec);
+
+			// ("codebase" URI REQUIRED)
+			adec = new AttrDecl(ATTR_NAME_CODEBASE);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.URI);
+			adec.usage = CMAttributeDeclaration.REQUIRED;
+			declarations.putNamedItem(ATTR_NAME_CODEBASE, adec);
+
+			// ("align" ENUM IMPLIED (top|middle|bottom|left|right))
+			adec = new AttrDecl(ATTR_NAME_ALIGN);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] aligns = {ATTR_VALUE_TOP, ATTR_VALUE_MIDDLE, ATTR_VALUE_BOTTOM, ATTR_VALUE_LEFT, ATTR_VALUE_RIGHT};
+			adec.type.setEnumValues(aligns);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_BOTTOM);
+			declarations.putNamedItem(ATTR_NAME_ALIGN, adec);
+
+			// ("archive" CDATA IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_ARCHIVE);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			declarations.putNamedItem(ATTR_NAME_ARCHIVE, adec);
+
+			// ("height" CDATA IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_HEIGHT);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			declarations.putNamedItem(ATTR_NAME_HEIGHT, adec);
+
+			// ("hspace" CDATA IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_HSPACE);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			declarations.putNamedItem(ATTR_NAME_HSPACE, adec);
+
+			// ("jreversion" CDATA DECLARED "1.1")
+			adec = new AttrDecl(ATTR_NAME_JREVERSION);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, JSP20Namespace.ATTR_VALUE_JVER12);
+			declarations.putNamedItem(ATTR_NAME_JREVERSION, adec);
+
+			// ("name" CDATA IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_NAME);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			declarations.putNamedItem(ATTR_NAME_NAME, adec);
+
+			// ("vspace" CDATA IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_VSPACE);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			declarations.putNamedItem(ATTR_NAME_VSPACE, adec);
+
+			// ("width" CDATA IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_WIDTH);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			declarations.putNamedItem(ATTR_NAME_WIDTH, adec);
+
+			// ("nspluginurl" URI IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_NSPLUGINURL);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.URI);
+			declarations.putNamedItem(ATTR_NAME_NSPLUGINURL, adec);
+
+			// ("iepluginurl" URI IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_IEPLUGINURL);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.URI);
+			declarations.putNamedItem(ATTR_NAME_IEPLUGINURL, adec);
+			
+			// ("mayscript" ENUM IMPLIED (true | false)
+			adec = new AttrDecl(JSP20Namespace.ATTR_NAME_MAYSCRIPT);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			adec.type.setEnumValues(new String[] {ATTR_VALUE_TRUE, ATTR_VALUE_FALSE});
+			declarations.putNamedItem(JSP20Namespace.ATTR_NAME_MAYSCRIPT, adec);
+		}
 	}
 
 	private static String[] names = null;
@@ -274,6 +455,25 @@
 				packet.layout = HTMLElementDeclaration.LAYOUT_HIDDEN;
 				packet.format = HTMLElementDeclaration.FORMAT_JSP_DIRECTIVE;
 				break;
+			case Ids.ID_DIRECTIVE_PAGE :
+				// directive.page
+				packet.name = DIRECTIVE_PAGE;
+				packet.omit = HTMLElementDeclaration.OMIT_END;
+				packet.layout = HTMLElementDeclaration.LAYOUT_HIDDEN;
+				packet.format = HTMLElementDeclaration.FORMAT_JSP_DIRECTIVE;
+				break;
+			case Ids.ID_ROOT :
+				packet.name = ROOT;
+				packet.content = CMElementDeclaration.ELEMENT;
+				packet.layout = HTMLElementDeclaration.LAYOUT_HIDDEN; // same as HTML
+				break;
+			case Ids.ID_PLUGIN :
+				// plugin
+				packet.name = PLUGIN;
+				packet.content = CMElementDeclaration.ELEMENT;
+				packet.layout = HTMLElementDeclaration.LAYOUT_OBJECT;
+				packet.indentChild = true;
+				break;
 			default :
 				return super.createElemDecl(eid);
 		}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/JSP20Namespace.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/JSP20Namespace.java
index 5a0dc9a..ee138a2 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/JSP20Namespace.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/JSP20Namespace.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,8 +44,6 @@
 	String ATTR_NAME_DESCRIPTION = "description"; //$NON-NLS-1$
 	String ATTR_NAME_EXAMPLE = "example"; //$NON-NLS-1$
 	String ATTR_NAME_LANGUAGE = "language"; //$NON-NLS-1$
-	String ATTR_NAME_IMPORT = "import"; //$NON-NLS-1$
-	String ATTR_NAME_PAGEENCODING = "pageEncoding"; //$NON-NLS-1$
 	String ATTR_NAME_ISELIGNORED = "isELIgnored"; //$NON-NLS-1$
 
 	String ATTR_NAME_REQUIRED = "required"; //$NON-NLS-1$
@@ -68,14 +66,32 @@
 	String ATTR_NAME_VAR = "var"; //$NON-NLS-1$
 	String ATTR_NAME_VARREADER = "varReader"; //$NON-NLS-1$
 
+	String ATTR_NAME_OMIT_XML_DECL = "omit-xml-declaration"; //$NON-NLS-1$
 	String ATTR_NAME_DOCTYPE_ROOT_ELEMENT = "doctype-root-element"; //$NON-NLS-1$
 	String ATTR_NAME_DOCTYPE_SYSTEM = "doctype-system"; //$NON-NLS-1$
 	String ATTR_NAME_DOCTYPE_PUBLIC = "doctype-public"; //$NON-NLS-1$
 
-	String ATTR_VALUE_NO = "no";
-	String ATTR_VALUE_YES = "yes";
+	String ATTR_VALUE_NO = "no"; //$NON-NLS-1$
+	String ATTR_VALUE_YES = "yes"; //$NON-NLS-1$
 
-	String ATTR_VALUE_SCOPE_AT_END = "AT_END";
-	String ATTR_VALUE_SCOPE_AT_BEGIN = "AT_BEGIN";
-	String ATTR_VALUE_SCOPE_NESTED = "NESTED";
+	String ATTR_VALUE_SCOPE_AT_END = "AT_END"; //$NON-NLS-1$
+	String ATTR_VALUE_SCOPE_AT_BEGIN = "AT_BEGIN"; //$NON-NLS-1$
+	String ATTR_VALUE_SCOPE_NESTED = "NESTED"; //$NON-NLS-1$
+
+	String ATTR_NAME_DYNAMIC_ATTRIBUTES = "dynamic-attributes"; //$NON-NLS-1$
+	
+	String ATTR_VALUE_ENCODING_DEFAULT = "ISO-8859-1"; //$NON-NLS-1$
+	
+	String ATTR_VALUE_VARIABLE_CLASS_DEFAULT = "java.lang.String"; //$NON-NLS-1$
+	
+	String ATTR_NAME_MAYSCRIPT = "mayscript"; //$NON-NLS-1$
+	
+	String ATTR_VALUE_JVER12 = "1.2"; //$NON-NLS-1$
+	
+	String ATTR_VALUE_JSP_VER_20 = "2.0"; //$NON-NLS-1$
+	
+	// JSP 2.1 attributes
+//	String ATTR_NAME_DEFERRED_SYNTAX_ALLOWED_AS_LITERAL = "deferredSyntaxAllowedAsLiteral"; //$NON-NLS-1$
+//	String ATTR_NAME_TRIM_DIRECTIVE_WHITESPACES = "trimDirectiveWhitespaces"; //$NON-NLS-1$
+	
 }
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/JSPElementCollection.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/JSPElementCollection.java
index 67832d9..c517f99 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/JSPElementCollection.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/JSPElementCollection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -327,7 +327,7 @@
 			return declarations;
 		}
 
-		private AttrDecl createBoolType(String name, String defValue) {
+		AttrDecl createBoolType(String name, String defValue) {
 			AttrDecl adec = new AttrDecl(name);
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.ENUM);
 			String[] values = {ATTR_VALUE_TRUE, ATTR_VALUE_FALSE};
@@ -411,7 +411,7 @@
 			declarations.putNamedItem(ATTR_NAME_FILE, adec);
 		}
 
-		void createForDirTaglib() {
+		private void createForDirTaglib() {
 			// ("uri" URI REQUIRED)
 			AttrDecl adec = new AttrDecl(ATTR_NAME_URI);
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.URI);
@@ -613,7 +613,7 @@
 		}
 
 		private void createForRoot() {
-			// ("xmlns:jsp" CDATA "http://jva.sun.com/JSP/Page")
+			// ("xmlns:jsp" CDATA "http://java.sun.com/JSP/Page")
 			AttrDecl adec = new AttrDecl(ATTR_NAME_XMLNS_JSP);
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
 			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_XMLNS_JSP);
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/Tag20ElementCollection.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/Tag20ElementCollection.java
index c8fb4ba..7ae40f2 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/Tag20ElementCollection.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/Tag20ElementCollection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2007 IBM Corporation and others.
+ * Copyright (c) 2004, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -91,7 +91,7 @@
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.ENUM);
 			String[] values = {ATTR_VALUE_TRUE, ATTR_VALUE_FALSE};
 			adec.type.setEnumValues(values);
-			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_FALSE);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_TRUE);
 			adec.usage = CMAttributeDeclaration.OPTIONAL;
 			declarations.putNamedItem(JSP20Namespace.ATTR_NAME_TRIM, adec);
 		}
@@ -109,6 +109,7 @@
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.ENUM);
 			String[] values = new String[]{ATTR_VALUE_TRUE, ATTR_VALUE_FALSE};
 			adec.type.setEnumValues(values);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_FALSE);
 			adec.usage = CMAttributeDeclaration.OPTIONAL;
 			declarations.putNamedItem(JSP20Namespace.ATTR_NAME_REQUIRED, adec);
 
@@ -116,6 +117,7 @@
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.ENUM);
 			values = new String[]{ATTR_VALUE_TRUE, ATTR_VALUE_FALSE};
 			adec.type.setEnumValues(values);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_FALSE);
 			adec.usage = CMAttributeDeclaration.OPTIONAL;
 			declarations.putNamedItem(JSP20Namespace.ATTR_NAME_FRAGMENT, adec);
 
@@ -123,6 +125,7 @@
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.ENUM);
 			values = new String[]{ATTR_VALUE_TRUE, ATTR_VALUE_FALSE};
 			adec.type.setEnumValues(values);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_TRUE);
 			adec.usage = CMAttributeDeclaration.OPTIONAL;
 			declarations.putNamedItem(JSP20Namespace.ATTR_NAME_RTEXPRVALUE, adec);
 
@@ -131,11 +134,6 @@
 			adec.usage = CMAttributeDeclaration.OPTIONAL;
 			declarations.putNamedItem(JSP20Namespace.ATTR_NAME_TYPE, adec);
 
-			adec = new AttrDecl(ATTR_NAME_NAME);
-			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
-			adec.usage = CMAttributeDeclaration.REQUIRED;
-			declarations.putNamedItem(ATTR_NAME_NAME, adec);
-
 			adec = new AttrDecl(JSP20Namespace.ATTR_NAME_DESCRIPTION);
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
 			adec.usage = CMAttributeDeclaration.OPTIONAL;
@@ -159,8 +157,14 @@
 			String[] values = {JSP20Namespace.ATTR_VALUE_EMPTY, JSP20Namespace.ATTR_VALUE_TAGDEPENDENT, JSP20Namespace.ATTR_VALUE_SCRIPTLESS};
 			adec.type.setEnumValues(values);
 			adec.usage = CMAttributeDeclaration.OPTIONAL;
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, JSP20Namespace.ATTR_VALUE_SCRIPTLESS);
 			declarations.putNamedItem(JSP20Namespace.ATTR_NAME_BODY_CONTENT, adec);
 
+			adec = new AttrDecl(JSP20Namespace.ATTR_NAME_DYNAMIC_ATTRIBUTES);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			adec.usage = CMAttributeDeclaration.OPTIONAL;
+			declarations.putNamedItem(JSP20Namespace.ATTR_NAME_DYNAMIC_ATTRIBUTES, adec);
+			
 			adec = new AttrDecl(JSP20Namespace.ATTR_NAME_SMALL_ICON);
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.URI);
 			adec.usage = CMAttributeDeclaration.OPTIONAL;
@@ -183,23 +187,26 @@
 
 			adec = new AttrDecl(JSP20Namespace.ATTR_NAME_LANGUAGE);
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_JAVA);
 			adec.usage = CMAttributeDeclaration.OPTIONAL;
 			declarations.putNamedItem(JSP20Namespace.ATTR_NAME_LANGUAGE, adec);
 
-			adec = new AttrDecl(JSP20Namespace.ATTR_NAME_IMPORT);
+			adec = new AttrDecl(JSP11Namespace.ATTR_NAME_IMPORT);
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
 			adec.usage = CMAttributeDeclaration.OPTIONAL;
-			declarations.putNamedItem(JSP20Namespace.ATTR_NAME_IMPORT, adec);
+			declarations.putNamedItem(JSP11Namespace.ATTR_NAME_IMPORT, adec);
 
-			adec = new AttrDecl(JSP20Namespace.ATTR_NAME_PAGEENCODING);
+			adec = new AttrDecl(JSP11Namespace.ATTR_NAME_PAGE_ENCODING);
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, JSP20Namespace.ATTR_VALUE_ENCODING_DEFAULT);
 			adec.usage = CMAttributeDeclaration.OPTIONAL;
-			declarations.putNamedItem(JSP20Namespace.ATTR_NAME_PAGEENCODING, adec);
+			declarations.putNamedItem(JSP11Namespace.ATTR_NAME_PAGE_ENCODING, adec);
 
 			adec = new AttrDecl(JSP20Namespace.ATTR_NAME_ISELIGNORED);
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.ENUM);
 			values = new String[]{ATTR_VALUE_TRUE, ATTR_VALUE_FALSE};
 			adec.type.setEnumValues(values);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_FALSE);
 			adec.usage = CMAttributeDeclaration.OPTIONAL;
 			declarations.putNamedItem(JSP20Namespace.ATTR_NAME_ISELIGNORED, adec);
 		}
@@ -245,6 +252,7 @@
 
 			adec = new AttrDecl(JSP20Namespace.ATTR_NAME_VARIABLE_CLASS);
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, JSP20Namespace.ATTR_VALUE_VARIABLE_CLASS_DEFAULT);
 			adec.usage = CMAttributeDeclaration.OPTIONAL;
 			declarations.putNamedItem(JSP20Namespace.ATTR_NAME_VARIABLE_CLASS, adec);
 
@@ -252,6 +260,7 @@
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.ENUM);
 			String[] values = new String[]{ATTR_VALUE_TRUE, ATTR_VALUE_FALSE};
 			adec.type.setEnumValues(values);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_TRUE);
 			adec.usage = CMAttributeDeclaration.OPTIONAL;
 			declarations.putNamedItem(JSP20Namespace.ATTR_NAME_DECLARE, adec);
 
@@ -284,7 +293,7 @@
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.ENUM);
 			String[] values = {ATTR_VALUE_PAGE, ATTR_VALUE_REQUEST, ATTR_VALUE_SESSION, ATTR_VALUE_APPLICATION};
 			adec.type.setEnumValues(values);
-			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_FALSE);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_PAGE);
 			adec.usage = CMAttributeDeclaration.OPTIONAL;
 			declarations.putNamedItem(JSP11Namespace.ATTR_NAME_SCOPE, adec);
 		}
@@ -316,19 +325,19 @@
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.ENUM);
 			String[] values = {ATTR_VALUE_PAGE, ATTR_VALUE_REQUEST, ATTR_VALUE_SESSION, ATTR_VALUE_APPLICATION};
 			adec.type.setEnumValues(values);
-			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_FALSE);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_PAGE);
 			adec.usage = CMAttributeDeclaration.OPTIONAL;
 			declarations.putNamedItem(JSP11Namespace.ATTR_NAME_SCOPE, adec);
 		}
 
 		private void createForOutput() {
-			AttrDecl adec = new AttrDecl(JSP20Namespace.ElementName.OUTPUT);
+			AttrDecl adec = new AttrDecl(JSP20Namespace.ATTR_NAME_OMIT_XML_DECL);
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.ENUM);
 			String[] values = {ATTR_VALUE_TRUE, ATTR_VALUE_FALSE, JSP20Namespace.ATTR_VALUE_YES, JSP20Namespace.ATTR_VALUE_NO};
 			adec.type.setEnumValues(values);
 			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, JSP20Namespace.ATTR_VALUE_NO);
 			adec.usage = CMAttributeDeclaration.OPTIONAL;
-			declarations.putNamedItem(JSP20Namespace.ElementName.OUTPUT, adec);
+			declarations.putNamedItem(JSP20Namespace.ATTR_NAME_OMIT_XML_DECL, adec);
 
 			adec = new AttrDecl(JSP20Namespace.ATTR_NAME_DOCTYPE_ROOT_ELEMENT);
 			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
@@ -345,6 +354,102 @@
 			adec.usage = CMAttributeDeclaration.OPTIONAL;
 			declarations.putNamedItem(JSP20Namespace.ATTR_NAME_DOCTYPE_PUBLIC, adec);
 		}
+		
+		private void createForRoot() {
+			// ("xmlns:jsp" CDATA "http://java.sun.com/JSP/Page")
+			AttrDecl adec = new AttrDecl(ATTR_NAME_XMLNS_JSP);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_XMLNS_JSP);
+			declarations.putNamedItem(ATTR_NAME_XMLNS_JSP, adec);
+			// ("version" CDATA REQUIRED)
+			adec = new AttrDecl(ATTR_NAME_VERSION);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, JSP20Namespace.ATTR_VALUE_JSP_VER_20);
+			adec.usage = CMAttributeDeclaration.REQUIRED;
+			declarations.putNamedItem(ATTR_NAME_VERSION, adec);
+		}
+		
+		private void createForPlugin() {
+			// ("type" ENUM REQUIRED (bean|applet))
+			AttrDecl adec = new AttrDecl(ATTR_NAME_TYPE);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			adec.usage = CMAttributeDeclaration.REQUIRED;
+			String[] values = {ATTR_VALUE_BEAN, ATTR_VALUE_APPLET};
+			adec.type.setEnumValues(values);
+			declarations.putNamedItem(ATTR_NAME_TYPE, adec);
+
+			// ("code" CDATA REQUIRED)
+			adec = new AttrDecl(ATTR_NAME_CODE);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.URI);
+			adec.usage = CMAttributeDeclaration.REQUIRED;
+			declarations.putNamedItem(ATTR_NAME_CODE, adec);
+
+			// ("codebase" URI REQUIRED)
+			adec = new AttrDecl(ATTR_NAME_CODEBASE);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.URI);
+			adec.usage = CMAttributeDeclaration.REQUIRED;
+			declarations.putNamedItem(ATTR_NAME_CODEBASE, adec);
+
+			// ("align" ENUM IMPLIED (top|middle|bottom|left|right))
+			adec = new AttrDecl(ATTR_NAME_ALIGN);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] aligns = {ATTR_VALUE_TOP, ATTR_VALUE_MIDDLE, ATTR_VALUE_BOTTOM, ATTR_VALUE_LEFT, ATTR_VALUE_RIGHT};
+			adec.type.setEnumValues(aligns);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_BOTTOM);
+			declarations.putNamedItem(ATTR_NAME_ALIGN, adec);
+
+			// ("archive" CDATA IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_ARCHIVE);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			declarations.putNamedItem(ATTR_NAME_ARCHIVE, adec);
+
+			// ("height" CDATA IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_HEIGHT);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			declarations.putNamedItem(ATTR_NAME_HEIGHT, adec);
+
+			// ("hspace" CDATA IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_HSPACE);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			declarations.putNamedItem(ATTR_NAME_HSPACE, adec);
+
+			// ("jreversion" CDATA DECLARED "1.1")
+			adec = new AttrDecl(ATTR_NAME_JREVERSION);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			adec.type.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, JSP20Namespace.ATTR_VALUE_JVER12);
+			declarations.putNamedItem(ATTR_NAME_JREVERSION, adec);
+
+			// ("name" CDATA IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_NAME);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			declarations.putNamedItem(ATTR_NAME_NAME, adec);
+
+			// ("vspace" CDATA IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_VSPACE);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			declarations.putNamedItem(ATTR_NAME_VSPACE, adec);
+
+			// ("width" CDATA IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_WIDTH);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			declarations.putNamedItem(ATTR_NAME_WIDTH, adec);
+
+			// ("nspluginurl" URI IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_NSPLUGINURL);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.URI);
+			declarations.putNamedItem(ATTR_NAME_NSPLUGINURL, adec);
+
+			// ("iepluginurl" URI IMPLIED)
+			adec = new AttrDecl(ATTR_NAME_IEPLUGINURL);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.URI);
+			declarations.putNamedItem(ATTR_NAME_IEPLUGINURL, adec);
+			
+			// ("mayscript" ENUM IMPLIED (true | false)
+			adec = new AttrDecl(JSP20Namespace.ATTR_NAME_MAYSCRIPT);
+			adec.type = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			adec.type.setEnumValues(new String[] {ATTR_VALUE_TRUE, ATTR_VALUE_FALSE});
+			declarations.putNamedItem(JSP20Namespace.ATTR_NAME_MAYSCRIPT, adec);
+		}
 
 		public CMNamedNodeMapImpl getDeclarations(int eid) {
 			switch (eid) {
@@ -378,6 +483,12 @@
 				case TagIds20.ID_OUTPUT :
 					createForOutput();
 					break;
+				case TagIds20.ID_ROOT :
+					createForRoot();
+					break;
+				case TagIds20.ID_PLUGIN :
+					createForPlugin();
+					break;
 				default :
 					super.getDeclarations(eid);
 					break;
@@ -553,6 +664,18 @@
 				packet.indentChild = true;
 				packet.format = HTMLElementDeclaration.FORMAT_JSP_SCRIPT;
 				break;
+			case TagIds20.ID_ROOT :
+				packet.name = ROOT;
+				packet.content = CMElementDeclaration.ELEMENT;
+				packet.layout = HTMLElementDeclaration.LAYOUT_HIDDEN; // same as HTML
+				break;
+			case TagIds20.ID_PLUGIN :
+				// plugin
+				packet.name = PLUGIN;
+				packet.content = CMElementDeclaration.ELEMENT;
+				packet.layout = HTMLElementDeclaration.LAYOUT_OBJECT;
+				packet.indentChild = true;
+				break;
 			default :
 				return super.createElemDecl(eid);
 		}