JBoss Rich Faces SVN: r15165 - in root/ui/trunk/components/core/src/main/java/org/ajax4jsf/component: behavior and 1 other directory.
by richfaces-svn-commits@lists.jboss.org
Author: abelevich
Date: 2009-08-13 08:38:00 -0400 (Thu, 13 Aug 2009)
New Revision: 15165
Added:
root/ui/trunk/components/core/src/main/java/org/ajax4jsf/component/behavior/
root/ui/trunk/components/core/src/main/java/org/ajax4jsf/component/behavior/AjaxBehavior.java
Log:
initial
Added: root/ui/trunk/components/core/src/main/java/org/ajax4jsf/component/behavior/AjaxBehavior.java
===================================================================
--- root/ui/trunk/components/core/src/main/java/org/ajax4jsf/component/behavior/AjaxBehavior.java (rev 0)
+++ root/ui/trunk/components/core/src/main/java/org/ajax4jsf/component/behavior/AjaxBehavior.java 2009-08-13 12:38:00 UTC (rev 15165)
@@ -0,0 +1,354 @@
+package org.ajax4jsf.component.behavior;
+
+import java.io.Serializable;
+import java.util.Set;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIComponentBase;
+import javax.faces.component.behavior.ClientBehavior;
+import javax.faces.component.behavior.ClientBehaviorContext;
+import javax.faces.component.behavior.ClientBehaviorHint;
+import javax.faces.context.FacesContext;
+import javax.faces.event.BehaviorEvent;
+
+import org.ajax4jsf.Messages;
+import org.ajax4jsf.component.AjaxContainer;
+import org.ajax4jsf.renderkit.AjaxRendererUtils;
+import org.ajax4jsf.renderkit.RendererUtils;
+
+public class AjaxBehavior extends UIComponentBase implements ClientBehavior {
+
+ private static final String COMPONENT_FAMILY = "javax.faces.Output";
+ public static final String COMPONENT_TYPE = "org.ajax4jsf.AjaxStatus";
+
+
+ @Override
+ public String getFamily() {
+ return COMPONENT_FAMILY;
+ }
+
+ /**
+ * id of form for wich status will displayed
+ *
+ */
+ private String _for;
+
+ /**
+ * @param new value of id of form for wich status will displayed to set
+ *
+ */
+ public void setFor(String _for) {
+ this._for = _for;
+ }
+
+ /**
+ * @return value or result of valueBinding of id of form for wich status will displayed
+ *
+ */
+ public String getFor()
+ {
+ return (String) getValueOrBinding(_for, "for");
+ }
+
+ /**
+ * Text to output on start request
+ */
+ private String _startText = null;
+
+ /**
+ * setter method for property
+ * @param new value of Text to output on start request to set
+ */
+ public void setStartText(String startText) {
+ this._startText = startText;
+ }
+
+ /**
+ * @return value or result of valueBinding of Text to output on start request
+ */
+ public String getStartText() {
+ return (String) getValueOrBinding(_startText, "startText");
+ }
+
+ /**
+ * Text to display on complete request
+ */
+ private String _stopText = null;
+
+ /**
+ * setter method for property
+ * @param new value of Text to display on complete request to set
+ */
+ public void setStopText(String stopText) {
+ this._stopText = stopText;
+ }
+
+ /**
+ * @return value or result of valueBinding of Text to display on complete request
+ */
+ public String getStopText() {
+ return (String) getValueOrBinding(_stopText, "stopText");
+ }
+
+ /**
+ * Style for display on start request
+ */
+ private String _startStyle = null;
+
+ /**
+ * setter method for property
+ * @param new value of Style for display on start request to set
+ */
+ public void setStartStyle(String startStyle) {
+ this._startStyle = startStyle;
+ }
+
+ /**
+ * @return value or result of valueBinding of Style for display on start request
+ */
+ public String getStartStyle() {
+ return (String) getValueOrBinding(_startStyle, "startStyle");
+ }
+ /**
+ * Style for displaying on complete
+ */
+ private String _stopStyle = null;
+
+ /**
+ * setter method for property
+ * @param new value of Style for displaying on complete to set
+ */
+ public void setStopStyle(String stopStyle) {
+ this._stopStyle = stopStyle;
+ }
+
+ /**
+ * @return value or result of valueBinding of Style for displaying on complete
+ */
+ public String getStopStyle() {
+ return (String) getValueOrBinding(_stopStyle, "stopStyle");
+ }
+ /**
+ * Style class for display on request
+ */
+ private String _startStyleClass = null;
+
+ /**
+ * setter method for property
+ * @param new value of Style class for display on request to set
+ */
+ public void setStartStyleClass(String startStyleClass) {
+ this._startStyleClass = startStyleClass;
+ }
+
+ /**
+ * @return value or result of valueBinding of Style class for display on request
+ */
+ public String getStartStyleClass() {
+ return (String) getValueOrBinding(_startStyleClass, "startStyleClass");
+ }
+ /**
+ * Style class for display on complete request
+ */
+ private String _stopStyleClass = null;
+
+ /**
+ * setter method for property
+ * @param new value of Style class for display on complete request to set
+ */
+ public void setStopStyleClass(String stopStyleClass) {
+ this._stopStyleClass = stopStyleClass;
+ }
+
+ /**
+ * @return value or result of valueBinding of Style class for display on complete request
+ */
+ public String getStopStyleClass() {
+ return (String) getValueOrBinding(_stopStyleClass, "stopStyleClass");
+ }
+
+ /**
+ * Force id to render in Html as is
+ */
+ private boolean _forceId = false;
+ private boolean _forceIdSet = false;
+
+ /**
+ * setter method for property
+ * @param new value of Force id to render in Html as is to set
+ */
+ public void setForceId(boolean forceId) {
+ this._forceId = forceId;
+ this._forceIdSet = true;
+ }
+
+ /**
+ * @return value or result of valueBinding of Force id to render in Html as is
+ */
+ public boolean isForceId() {
+ return isValueOrBinding(_forceId, _forceIdSet, "forceId");
+ }
+
+
+
+
+ private String _clientId = null;
+
+ /* (non-Javadoc)
+ * @see javax.faces.component.UIComponentBase#getClientId(javax.faces.context.FacesContext)
+ */
+ public String getClientId(FacesContext context) {
+ if (null == _clientId) {
+ String forValue = getFor();
+ UIComponent container;
+ if (null != forValue) {
+ container = RendererUtils.getInstance().findComponentFor(this, forValue);
+ // 'for' attribute must be pointed to real container in view tree
+ if (null == container || !(container instanceof AjaxContainer)) {
+ throw new FacesException(
+ Messages.getMessage(Messages.FOR_TARGETS_NO_AJAX_CONTAINER, getId()));
+ }
+ _clientId = container.getClientId(context) + ":status";
+
+ } else if (isForceId()) {
+ _clientId = getRenderer(context).convertClientId(context,
+ this.getId());
+ } else if (null !=(container = (UIComponent) AjaxRendererUtils.findAjaxContainer(context,this))) {
+ _clientId = container.getClientId(context) + ":status";
+ } else {
+ _clientId = super.getClientId(context);
+ }
+ }
+ return _clientId;
+ }
+
+
+ /* (non-Javadoc)
+ * reset clientId for calculate
+ * @see javax.faces.component.UIComponentBase#setId(java.lang.String)
+ */
+ public void setId(String arg0) {
+ super.setId(arg0);
+ _clientId = null;
+ }
+
+ /* (non-Javadoc)
+ * @see javax.faces.component.UIComponentBase#restoreState(javax.faces.context.FacesContext, java.lang.Object)
+ */
+ public void restoreState(FacesContext context, Object state)
+ {
+ State myState = (State) state;
+ _for = myState._for;
+ _startText = myState._startText;
+ _stopText = myState._stopText;
+ _startStyle = myState._startStyle;
+ _stopStyle = myState._stopStyle;
+ _startStyleClass = myState._startStyleClass;
+ _stopStyleClass = myState._stopStyleClass;
+ _forceId = myState._forceId;
+ _forceIdSet = myState._forceIdSet;
+ super.restoreState(context, myState.superState);
+ }
+
+ /* (non-Javadoc)
+ * @see javax.faces.component.UIComponentBase#saveState(javax.faces.context.FacesContext)
+ */
+ public Object saveState(FacesContext context)
+ {
+ State state = new State();
+ state._for = _for;
+ state._startText = _startText;
+ state._stopText = _stopText;
+ state._startStyle = _startStyle;
+ state._stopStyle = _stopStyle;
+ state._startStyleClass = _startStyleClass;
+ state._stopStyleClass = _stopStyleClass;
+ state._forceId = _forceId;
+ state._forceIdSet = _forceIdSet;
+ state.superState = super.saveState(context);
+ return state;
+ }
+
+ /**
+ * @author shura (latest modification by $Author: alexsmirnov $)
+ * @version $Revision: 1.1.2.1 $ $Date: 2007/01/09 18:58:25 $
+ * Memento pattern state class for save-restore component.
+ */
+ public static class State implements Serializable {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 317266574102385358L;
+ Object superState;
+ String _for;
+ String _startText;
+ String _stopText;
+ String _startStyle;
+ String _stopStyle;
+ String _startStyleClass;
+ String _stopStyleClass;
+ boolean _forceIdSet;
+ boolean _forceId;
+ }
+
+ /**
+ * @param field - value of field to get.
+ * @param name - name of field, to get from ValueBinding
+ * @return boolean value, based on field or valuebinding.
+ */
+ private boolean isValueOrBinding(boolean field, boolean fieldSet, String name){
+ if( fieldSet ){
+ return field;
+ }
+ ValueExpression vb = getValueExpression(name);
+ if (null != vb) {
+ return ((Boolean)vb.getValue(getELContext())).booleanValue();
+ } else {
+ return false;
+ }
+
+ }
+
+ public void decode(FacesContext context, UIComponent component) {
+ //TODO should be implemented soon
+ }
+
+ public Set<ClientBehaviorHint> getHints() {
+ //TODO should be implemented soon
+ return null;
+ }
+
+ public String getScript(ClientBehaviorContext behaviorContext) {
+ //TODO should be implemented soon
+ return null;
+ }
+
+ public void broadcast(BehaviorEvent event) {
+ //TODO should be implemented soon
+ }
+
+ /**
+ * @param field - value of field to get.
+ * @param name - name of field, to get from ValueBinding
+ * @return field or value of binding expression.
+ */
+ private Object getValueOrBinding(Object field, String name){
+ if( null != field){
+ return field;
+ }
+ ValueExpression ve = getValueExpression(name);
+ if (null != ve) {
+ return ve.getValue(getELContext());
+ } else {
+ return null;
+ }
+ }
+
+ private ELContext getELContext() {
+ return getFacesContext().getELContext();
+ }
+
+}
15 years, 4 months
JBoss Rich Faces SVN: r15164 - in root/cdk/trunk/plugins/generator/src: main/java/org/richfaces/cdk and 7 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: alexsmirnov
Date: 2009-08-12 20:50:29 -0400 (Wed, 12 Aug 2009)
New Revision: 15164
Added:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/RendererTemplateParser.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkWriter.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/ModelBuilder.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/StandardOutputs.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/StandardSources.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/java/
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/java/ComponentClassGenerator.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FacesConfigParser.java
root/cdk/trunk/plugins/generator/src/main/javadoc/org/richfaces/cdk/MVC.dia
root/cdk/trunk/plugins/generator/src/main/javadoc/org/richfaces/cdk/MVC.png
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/AbstractCdkContext.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkContext.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkCompiler.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkProcessor.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ComponentProcessor.java
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/ProcessorTest.java
root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/test/component/AbstractTestComponent.java
Log:
Change classes structure according to http://www.jboss.org/community/wiki/CdkGeneratorArchitecture
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/RendererTemplateParser.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/RendererTemplateParser.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/RendererTemplateParser.java 2009-08-13 00:50:29 UTC (rev 15164)
@@ -0,0 +1,56 @@
+/*
+ * $Id$
+ *
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.builder.templates;
+
+import org.richfaces.cdk.CdkContext;
+import org.richfaces.cdk.CdkException;
+import org.richfaces.cdk.ModelBuilder;
+import org.richfaces.cdk.model.ComponentLibrary;
+
+/**
+ * <p class="changed_added_4_0"></p>
+ * @author asmirnov(a)exadel.com
+ *
+ */
+public class RendererTemplateParser implements ModelBuilder {
+
+ /* (non-Javadoc)
+ * @see org.richfaces.cdk.ModelBuilder#build()
+ */
+ @Override
+ public ComponentLibrary build() throws CdkException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.richfaces.cdk.ModelBuilder#init(org.richfaces.cdk.CdkContext)
+ */
+ @Override
+ public void init(CdkContext context) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
Property changes on: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/RendererTemplateParser.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/AbstractCdkContext.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/AbstractCdkContext.java 2009-08-13 00:49:45 UTC (rev 15163)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/AbstractCdkContext.java 2009-08-13 00:50:29 UTC (rev 15164)
@@ -24,9 +24,12 @@
package org.richfaces.cdk;
import java.io.File;
+import java.util.Map;
import org.richfaces.cdk.model.ComponentLibrary;
+import com.google.common.collect.Maps;
+
/**
* <p class="changed_added_4_0">Base CDK context class. Particular build tool ( Ant, Maven ) should extend that class with
* tool-specific methods.</p>
@@ -44,6 +47,8 @@
private File resourceOutput;
private NamingConventions namingConventions;
+
+ private Map<SourceType, Iterable<File>> sources = Maps.newHashMap();
/**
* <p class="changed_added_4_0"></p>
@@ -124,6 +129,15 @@
public void setNamingConventions(NamingConventions namingConventions) {
this.namingConventions = namingConventions;
}
+
+ public void addSources(SourceType type,Iterable<File> files) {
+ sources.put(type, files);
+ }
+ @Override
+ public Iterable<File> getSources(SourceType type) {
+ return sources.get(type);
+ }
+
}
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkContext.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkContext.java 2009-08-13 00:49:45 UTC (rev 15163)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkContext.java 2009-08-13 00:50:29 UTC (rev 15164)
@@ -13,6 +13,15 @@
*
*/
public interface CdkContext {
+
+ /**
+ * <p class="changed_added_4_0">Type of source files e.g. Java classes, faces-configs, renderer templates</p>
+ * @author asmirnov(a)exadel.com
+ *
+ */
+ interface SourceType {
+ String getName();
+ }
/**
* <p class="changed_added_4_0">
@@ -55,5 +64,12 @@
* @return
*/
public NamingConventions getNamingConventions();
+
+ /**
+ * <p class="changed_added_4_0">Get all sources for given type.</p>
+ * @param type
+ * @return
+ */
+ public Iterable<File> getSources(SourceType type);
}
\ No newline at end of file
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkWriter.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkWriter.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkWriter.java 2009-08-13 00:50:29 UTC (rev 15164)
@@ -0,0 +1,43 @@
+/*
+ * $Id$
+ *
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.cdk;
+
+import org.richfaces.cdk.model.ComponentLibrary;
+
+/**
+ * <p class="changed_added_4_0"></p>
+ * @author asmirnov(a)exadel.com
+ *
+ */
+public interface CdkWriter {
+
+ interface OutputType {
+ String getName();
+ }
+
+ public void init(CdkContext context);
+
+ public void render(ComponentLibrary library) throws CdkException;
+
+}
Property changes on: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkWriter.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/ModelBuilder.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/ModelBuilder.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/ModelBuilder.java 2009-08-13 00:50:29 UTC (rev 15164)
@@ -0,0 +1,48 @@
+/*
+ * $Id$
+ *
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.cdk;
+
+import org.richfaces.cdk.model.ComponentLibrary;
+
+/**
+ * <p class="changed_added_4_0">Interface for {@link ComponentLibrary} model builder.</p>
+ * @author asmirnov(a)exadel.com
+ *
+ */
+public interface ModelBuilder {
+
+ /**
+ * <p class="changed_added_4_0">Initialize builder.</p>
+ * @param context
+ */
+ public void init(CdkContext context);
+
+ /**
+ * <p class="changed_added_4_0">Build library model.</p>
+ * @return
+ * @throws CdkException
+ */
+ public ComponentLibrary build() throws CdkException;
+
+}
Property changes on: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/ModelBuilder.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/StandardOutputs.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/StandardOutputs.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/StandardOutputs.java 2009-08-13 00:50:29 UTC (rev 15164)
@@ -0,0 +1,49 @@
+/*
+ * $Id$
+ *
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.cdk;
+
+import org.richfaces.cdk.CdkWriter.OutputType;
+
+/**
+ * <p class="changed_added_4_0"></p>
+ * @author asmirnov(a)exadel.com
+ *
+ */
+public enum StandardOutputs implements OutputType {
+ COMPONENT_CLASSES,
+ RENDERER_CLASSES,
+ EVENT_LISTENER_CLASSES,
+ EVENT_SOURCE_CLASSES,
+ TAG_HANDLER_CLASSES,
+ FACES_CONFIG,
+ TAG_LIBRARY,
+ JBDS_RENDERERS,
+ XML_SCHEMA;
+
+ @Override
+ public String getName() {
+ return name();
+ }
+
+}
Property changes on: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/StandardOutputs.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/StandardSources.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/StandardSources.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/StandardSources.java 2009-08-13 00:50:29 UTC (rev 15164)
@@ -0,0 +1,44 @@
+/*
+ * $Id$
+ *
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.cdk;
+
+import org.richfaces.cdk.CdkContext.SourceType;
+
+/**
+ * <p class="changed_added_4_0"></p>
+ * @author asmirnov(a)exadel.com
+ *
+ */
+public enum StandardSources implements SourceType {
+
+ JAVA_SOURCES,
+ FACES_CONFIGS,
+ RENDERER_TEMPLATES;
+
+ @Override
+ public String getName() {
+ return name();
+ }
+
+}
Property changes on: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/StandardSources.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkCompiler.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkCompiler.java 2009-08-13 00:49:45 UTC (rev 15163)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkCompiler.java 2009-08-13 00:50:29 UTC (rev 15164)
@@ -43,8 +43,12 @@
import javax.tools.JavaCompiler.CompilationTask;
import org.richfaces.cdk.CdkContext;
+import org.richfaces.cdk.CdkException;
import org.richfaces.cdk.Logger;
import org.richfaces.cdk.LoggerFactory;
+import org.richfaces.cdk.ModelBuilder;
+import org.richfaces.cdk.StandardSources;
+import org.richfaces.cdk.model.ComponentLibrary;
import com.google.common.collect.Lists;
@@ -56,7 +60,7 @@
* @author asmirnov(a)exadel.com
*
*/
-public class CdkCompiler {
+public class CdkCompiler implements ModelBuilder {
private static final Logger log = LoggerFactory.getLogger();
@@ -68,13 +72,17 @@
private Locale locale;
+ private CdkContext context;
+
/**
* <p class="changed_added_4_0">Builder method that creates and initializes compiler instance.
* That instance can be reused for consecuence processing.</p>
* @param context
* @return
*/
- public static CdkCompiler create(CdkContext context) {
+ @Override
+ public void init(CdkContext context) {
+ this.context = context;
CdkCompiler compiler = new CdkCompiler();
JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
compiler.setJavaCompiler(javaCompiler);
@@ -132,16 +140,22 @@
context.getLoader());
fileManager.setJavaSourceDirectory(context.getJavaSource());
compiler.setFileManager(fileManager);
- return compiler;
}
+ @Override
+ public ComponentLibrary build() throws CdkException {
+ ComponentLibrary library = new ComponentLibrary();
+ ComponentProcessor processor = new ComponentProcessor(context,library);
+ process(context.getSources(StandardSources.JAVA_SOURCES),processor);
+ return library;
+ }
/**
* <p class="changed_added_4_0">That method process source files and call appropriate annotation processors</p>
* @param sources
* @param processors
* @throws AptException
*/
- public void process(Iterable<File> sources, Processor...processors) throws AptException {
+ protected void process(Iterable<File> sources, Processor...processors) throws AptException {
final List<String> messages = Lists.newArrayList();
DiagnosticListener<JavaFileObject> listener = new DiagnosticListener<JavaFileObject>() {
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkProcessor.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkProcessor.java 2009-08-13 00:49:45 UTC (rev 15163)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkProcessor.java 2009-08-13 00:50:29 UTC (rev 15164)
@@ -35,7 +35,9 @@
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.TypeParameterElement;
import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.ElementFilter;
@@ -83,7 +85,6 @@
public int hashCode() {
final int prime = 31;
int result = 1;
- result = prime * result + getOuterType().hashCode();
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@@ -102,8 +103,6 @@
if (getClass() != obj.getClass())
return false;
BeanProperty other = (BeanProperty) obj;
- if (!getOuterType().equals(other.getOuterType()))
- return false;
if (name == null) {
if (other.name != null)
return false;
@@ -132,10 +131,23 @@
return name;
}
- private CdkProcessor getOuterType() {
- return CdkProcessor.this;
+ /**
+ * <p class="changed_added_4_0">Get JavaDoc comment of appropriate bean property element.</p>
+ * @return
+ */
+ public String getDocComment() {
+ return processingEnv.getElementUtils().getDocComment(element);
}
+ public String getTypeName() {
+ return type.toString();
+ }
+
+ public String getTypeParameters() {
+ // TODO - analyze type parameters for getter/setter methods.
+ return null;
+ }
+
}
/**
@@ -212,18 +224,18 @@
protected Set<BeanProperty> getBeanPropertiesAnnotatedWith(
Class<? extends Annotation> annotation, TypeElement type) {
Set<BeanProperty> properties = Sets.newHashSet();
- List<ExecutableElement> methodsIn = ElementFilter
- .methodsIn(this.processingEnv.getElementUtils().getAllMembers(
- type));
+ List<? extends Element> members = this.processingEnv.getElementUtils().getAllMembers(
+ type);
// Get all methods and fields annotated by annotation.
- for (ExecutableElement executableElement : methodsIn) {
- if (null != executableElement.getAnnotation(annotation)) {
+ for (Element childElement : members) {
+ if (null != childElement.getAnnotation(annotation)) {
// Have an annotation, infer property name.
String name;
TypeMirror propertyType;
- if (ElementKind.METHOD.equals(executableElement.getKind())) {
- propertyType = executableElement.getReturnType();
- List<? extends VariableElement> parameters = executableElement
+ if (ElementKind.METHOD.equals(childElement.getKind())) {
+ ExecutableElement method = (ExecutableElement) childElement;
+ propertyType = method.getReturnType();
+ List<? extends VariableElement> parameters = method
.getParameters();
if (TypeKind.VOID.equals(propertyType.getKind())
&& 1 == parameters.size()) {
@@ -236,24 +248,25 @@
}
try {
name = PropertyUtils
- .methodToName(executableElement.getSimpleName()
+ .methodToName(childElement.getSimpleName()
.toString());
} catch (InvalidNameException e) {
// TODO Invalid method name for a bean property, throw
// exception ?
continue;
}
-
+ // TODO - Get method type parameters.
+ // List<? extends TypeParameterElement> typeParameters = method.getTypeParameters();
} else if (ElementKind.FIELD
- .equals(executableElement.getKind())) {
- name = executableElement.getSimpleName().toString();
- propertyType = executableElement.asType();
+ .equals(childElement.getKind())) {
+ name = childElement.getSimpleName().toString();
+ propertyType = childElement.asType();
} else {
continue;
}
BeanProperty property = new BeanProperty(name);
property.type = propertyType;
- property.element = executableElement;
+ property.element = childElement;
// TODO - merge properties with same name ?
properties.add(property);
}
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ComponentProcessor.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ComponentProcessor.java 2009-08-13 00:49:45 UTC (rev 15163)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ComponentProcessor.java 2009-08-13 00:50:29 UTC (rev 15164)
@@ -34,10 +34,13 @@
import org.richfaces.cdk.CdkContext;
import org.richfaces.cdk.NamingConventions;
+import org.richfaces.cdk.annotations.Attribute;
import org.richfaces.cdk.annotations.Component;
import org.richfaces.cdk.annotations.Family;
+import org.richfaces.cdk.model.ClassDescription;
import org.richfaces.cdk.model.ComponentLibrary;
import org.richfaces.cdk.model.InvalidNameException;
+import org.richfaces.cdk.model.Property;
import org.richfaces.cdk.model.Component.Type;
import org.richfaces.cdk.util.Strings;
@@ -75,16 +78,33 @@
try {
// Process class-level annotations.
// Calculate type for base UI component class.
+ // TODO - encpsulate that into simple utility classes call.
Component componentAnnotation = component.getAnnotation(Component.class);
String baseClassName = component.getQualifiedName().toString();
String componentType = namingUtils.inferComponentType(componentAnnotation.type(),baseClassName);
String uiComponentClass = namingUtils.inferUIComponentClass(componentType, componentAnnotation.className(), baseClassName, component.getModifiers().contains(Modifier.ABSTRACT));
+ // Create/get component instance.
org.richfaces.cdk.model.Component componentModel = library
.createComponent(componentType, uiComponentClass, baseClassName);
// Component Family.
Family family = component.getAnnotation(Family.class);
componentModel.setFamily(Strings.isEmpty(family.value())?componentType:family.value());
+ // JavaDoc comments
+ componentModel.setDescription(this.processingEnv.getElementUtils().getDocComment(component));
+ // TODO - process Events attribute.
+ // TODO - renderers, ....
// Process attributes.
+ Set<BeanProperty> properties = getBeanPropertiesAnnotatedWith(Attribute.class, component);
+ // TODO - encapsulate attribute builder into utility class.
+ for (BeanProperty beanProperty : properties) {
+ Property atribute = componentModel.addAtribute(beanProperty.getName());
+ // Documentation
+ atribute.setDescription(beanProperty.getDocComment());
+ // Type.
+ atribute.setType(new ClassDescription(beanProperty.getTypeName()));
+ // Flags.
+ }
+ // TODO - Process standard information for parent classes and intrfaces.
} catch (InvalidNameException e) {
// rise error and continue.
processingEnv.getMessager().printMessage(javax.tools.Diagnostic.Kind.ERROR, e.getMessage(), component);
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/java/ComponentClassGenerator.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/java/ComponentClassGenerator.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/java/ComponentClassGenerator.java 2009-08-13 00:50:29 UTC (rev 15164)
@@ -0,0 +1,56 @@
+/*
+ * $Id$
+ *
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.cdk.generate.java;
+
+import org.richfaces.cdk.CdkContext;
+import org.richfaces.cdk.CdkException;
+import org.richfaces.cdk.CdkWriter;
+import org.richfaces.cdk.model.ComponentLibrary;
+
+/**
+ * <p class="changed_added_4_0"></p>
+ * @author asmirnov(a)exadel.com
+ *
+ */
+public class ComponentClassGenerator implements CdkWriter {
+
+ /* (non-Javadoc)
+ * @see org.richfaces.cdk.CdkWriter#init(org.richfaces.cdk.CdkContext)
+ */
+ @Override
+ public void init(CdkContext context) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.richfaces.cdk.CdkWriter#render(org.richfaces.cdk.model.ComponentLibrary)
+ */
+ @Override
+ public void render(ComponentLibrary library) throws CdkException {
+ // TODO Auto-generated method stub
+
+ }
+
+}
Property changes on: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/java/ComponentClassGenerator.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FacesConfigParser.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FacesConfigParser.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FacesConfigParser.java 2009-08-13 00:50:29 UTC (rev 15164)
@@ -0,0 +1,56 @@
+/*
+ * $Id$
+ *
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.cdk.xmlconfig;
+
+import org.richfaces.cdk.CdkContext;
+import org.richfaces.cdk.CdkException;
+import org.richfaces.cdk.ModelBuilder;
+import org.richfaces.cdk.model.ComponentLibrary;
+
+/**
+ * <p class="changed_added_4_0"></p>
+ * @author asmirnov(a)exadel.com
+ *
+ */
+public class FacesConfigParser implements ModelBuilder {
+
+ /* (non-Javadoc)
+ * @see org.richfaces.cdk.ModelBuilder#build()
+ */
+ @Override
+ public ComponentLibrary build() throws CdkException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.richfaces.cdk.ModelBuilder#init(org.richfaces.cdk.CdkContext)
+ */
+ @Override
+ public void init(CdkContext context) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
Property changes on: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FacesConfigParser.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: root/cdk/trunk/plugins/generator/src/main/javadoc/org/richfaces/cdk/MVC.dia
===================================================================
(Binary files differ)
Property changes on: root/cdk/trunk/plugins/generator/src/main/javadoc/org/richfaces/cdk/MVC.dia
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: root/cdk/trunk/plugins/generator/src/main/javadoc/org/richfaces/cdk/MVC.png
===================================================================
(Binary files differ)
Property changes on: root/cdk/trunk/plugins/generator/src/main/javadoc/org/richfaces/cdk/MVC.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/ProcessorTest.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/ProcessorTest.java 2009-08-13 00:49:45 UTC (rev 15163)
+++ root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/ProcessorTest.java 2009-08-13 00:50:29 UTC (rev 15164)
@@ -54,10 +54,12 @@
import org.richfaces.cdk.CdkContext;
import org.richfaces.cdk.annotations.Attribute;
import org.richfaces.cdk.annotations.Component;
+import org.richfaces.cdk.apt.CdkProcessor.BeanProperty;
import org.richfaces.cdk.model.ComponentLibrary;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
/**
* <p class="changed_added_4_0">
@@ -167,7 +169,8 @@
expect(processor.getSupportedSourceVersion()).andReturn(
SourceVersion.RELEASE_6);
replay(processor);
- CdkCompiler compiler = CdkCompiler.create(cdkContext);
+ CdkCompiler compiler = new CdkCompiler();
+ compiler.init(cdkContext);
compiler.process(ImmutableList.of(getJavaFile(CLASS_JAVA)), processor);
verify(cdkContext, processor);
}
@@ -206,7 +209,8 @@
expect(processor.getSupportedSourceVersion()).andReturn(
SourceVersion.RELEASE_6);
replay(processor);
- CdkCompiler compiler = CdkCompiler.create(cdkContext);
+ CdkCompiler compiler = new CdkCompiler();
+ compiler.init(cdkContext);
compiler.process(ImmutableList.of(getJavaFile(SUB_CLASS_JAVA),
getJavaFile(CLASS_JAVA)), processor);
verify(cdkContext, processor);
@@ -248,7 +252,8 @@
// ComponentLibrary library = new
// ComponentLibrary("org.richfaces.cdk.test");
// processor.library = library;
- CdkCompiler compiler = CdkCompiler.create(cdkContext);
+ CdkCompiler compiler = new CdkCompiler();
+ compiler.init(cdkContext);
compiler.process(ImmutableList.of(getJavaFile(COMPONENT_CLASS_JAVA)),
processor);
verify(cdkContext);
@@ -281,8 +286,25 @@
TypeElement typeElement = getClassesAnnotatedWith(
Component.class, roundEnv).iterator().next();
Set<BeanProperty> beanProperties = getBeanPropertiesAnnotatedWith(Attribute.class, typeElement);
- assertEquals(1, beanProperties.size());
- assertEquals("testValue", beanProperties.iterator().next().getName());
+ assertEquals(3, beanProperties.size());
+ BeanProperty property = Iterables.get(beanProperties,2);
+ assertEquals("foo", property.getName());
+ assertEquals("int", property.getTypeName());
+ assertNull(property.getDocComment());
+ assertNull(property.getTypeParameters());
+
+ property = Iterables.get(beanProperties,1);
+ assertEquals("testValue", property.getName());
+ assertEquals("java.util.List<java.lang.String>", property.getTypeName());
+ assertEquals(" Test Attribute\n", property.getDocComment());
+ assertNull(property.getTypeParameters());
+
+ property = Iterables.get(beanProperties,0);
+ assertEquals("barValue", property.getName());
+ assertEquals("java.util.List<M>", property.getTypeName());
+ assertEquals(" Bar Attribute\n", property.getDocComment());
+// assertEquals("<M>" ,property.getTypeParameters());
+
numOfComponents++;
}
return true;
@@ -291,7 +313,8 @@
// ComponentLibrary library = new
// ComponentLibrary("org.richfaces.cdk.test");
// processor.library = library;
- CdkCompiler compiler = CdkCompiler.create(cdkContext);
+ CdkCompiler compiler = new CdkCompiler();
+ compiler.init(cdkContext);
compiler.process(ImmutableList.of(getJavaFile(COMPONENT_CLASS_JAVA)),
processor);
verify(cdkContext);
Modified: root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/test/component/AbstractTestComponent.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/test/component/AbstractTestComponent.java 2009-08-13 00:49:45 UTC (rev 15163)
+++ root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/test/component/AbstractTestComponent.java 2009-08-13 00:50:29 UTC (rev 15164)
@@ -26,6 +26,7 @@
import org.richfaces.cdk.annotations.Attribute;
import org.richfaces.cdk.annotations.Component;
+import java.util.List;
import javax.faces.component.UIComponent;
import javax.faces.component.ValueHolder;
@@ -34,16 +35,22 @@
* @author asmirnov(a)exadel.com
*
*/
-@Component(type="org.richfaces.cdk.test.TestComponent",family="org.richfaces.Family")
+@Component(type="org.richfaces.cdk.test.TestComponent")
public abstract class AbstractTestComponent extends UIComponent implements
ValueHolder {
+ @Attribute
+ private int foo;
+
/**
- *
- * <p class="changed_added_4_0"></p>
- * @return
+ * Test Attribute
*/
@Attribute
- public abstract Object getTestValue();
+ public abstract List<String> getTestValue();
+ /**
+ * Bar Attribute
+ */
+ @Attribute
+ public abstract <M> void setBarValue(List<M> bar);
}
15 years, 4 months
JBoss Rich Faces SVN: r15163 - root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk.
by richfaces-svn-commits@lists.jboss.org
Author: alexsmirnov
Date: 2009-08-12 20:49:45 -0400 (Wed, 12 Aug 2009)
New Revision: 15163
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/LibraryBuilder.java
Log:
Change classes structure according to http://www.jboss.org/community/wiki/CdkGeneratorArchitecture
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/LibraryBuilder.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/LibraryBuilder.java 2009-08-12 22:44:17 UTC (rev 15162)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/LibraryBuilder.java 2009-08-13 00:49:45 UTC (rev 15163)
@@ -24,30 +24,39 @@
package org.richfaces.cdk;
import java.io.File;
-import java.io.FileInputStream;
-import java.io.PrintWriter;
-import org.richfaces.builder.model.JavaClass;
-import org.richfaces.builder.render.JavaClassRenderer;
-import org.richfaces.builder.templates.TemplateReader;
+import org.richfaces.builder.templates.RendererTemplateParser;
+import org.richfaces.cdk.CdkContext.SourceType;
+import org.richfaces.cdk.CdkWriter.OutputType;
import org.richfaces.cdk.apt.CdkCompiler;
+import org.richfaces.cdk.apt.CdkProcessor;
import org.richfaces.cdk.apt.ComponentProcessor;
+import org.richfaces.cdk.generate.java.ComponentClassGenerator;
import org.richfaces.cdk.model.ComponentLibrary;
+import org.richfaces.cdk.xmlconfig.FacesConfigParser;
/**
- * <p class="changed_added_4_0">That class builds JSF library model from different sources. It acts as "controller" for whole CDK generation process.</p>
+ * <p class="changed_added_4_0">
+ * That class builds JSF library model from different sources. It acts as
+ * "controller" for whole CDK generation process.
+ * </p>
+ *
* @author asmirnov(a)exadel.com
- *
+ *
*/
public final class LibraryBuilder {
-
+
/**
- * <p class="changed_added_4_0">Current CDK context</p>
- */
+ * <p class="changed_added_4_0">
+ * Current CDK context
+ * </p>
+ */
private final CdkContext context;
-
+
/**
- * <p class="changed_added_4_0"></p>
+ * <p class="changed_added_4_0">
+ * </p>
+ *
* @param context
*/
LibraryBuilder(CdkContext context) {
@@ -55,87 +64,111 @@
}
/**
- * <p class="changed_added_4_0">Static factory method</p>
+ * <p class="changed_added_4_0">
+ * Static factory method
+ * </p>
+ *
* @return
*/
public static LibraryBuilder createInstance(CdkContext context) {
return new LibraryBuilder(context);
}
-
+
/**
- * <p class="changed_added_4_0">Parse source files for annotations and populate CDK-related information into model.</p>
- * @param sources Java Source files.
+ * <p class="changed_added_4_0">
+ * Parse source files for annotations and populate CDK-related information
+ * into model.
+ * </p>
+ *
+ * @param sources
+ * Java Source files.
* @return generated library model.
* @throws CdkException
*/
- public ComponentLibrary buildModelFromAnnotations(Iterable<File> sources) throws CdkException {
- CdkCompiler compiler = CdkCompiler.create(getContext());
- ComponentLibrary library = createLibrary();
- ComponentProcessor componentProcessor = new ComponentProcessor(getContext(),library);
- compiler.process(sources, componentProcessor);
- return library;
+ public ComponentLibrary buildModel(SourceType type) throws CdkException {
+ ModelBuilder modelBuilder = getBuilderFor(type);
+ return modelBuilder.build();
}
/**
- * <p class="changed_added_4_0">Compile and store in the model Renderer templates.</p>
+ * <p class="changed_added_4_0">
+ * Compile and store in the model Renderer templates.
+ * </p>
+ *
* @param templates
* @throws CdkException
*/
- public ComponentLibrary compileRendererTemplates(Iterable<File> templates) throws CdkException {
- ComponentLibrary library = createLibrary();
-
- try {
- for (File file : templates) {
- JavaClass javaClass = TemplateReader.parse(new FileInputStream(file));
-
- String fullName = javaClass.getFullName();
-
- File outFile = new File(context.getJavaSourceOutput(),
- fullName.replace('.', '/') + ".java");
-
- if (outFile.exists()) {
- outFile.delete();
- }
-
- outFile.getParentFile().mkdirs();
-
- new JavaClassRenderer().render(javaClass, new PrintWriter(outFile));
+ public ComponentLibrary buildModel() throws CdkException {
+ ComponentLibrary library = null;
+ for (SourceType type : StandardSources.values()) {
+ ComponentLibrary model = buildModel(type);
+ if (null != library) {
+ library.apply(model);
+ } else {
+ library = model;
}
- } catch (Exception e) {
- // TODO: handle exception
- throw new CdkException(e.getMessage(), e);
}
-
return library;
}
+
/**
- * <p class="changed_added_4_0">Append configuration from faces-config.xml to existing library.</p>
- * @param context
- * @param configs
+ * <p class="changed_added_4_0">Cenerate files from library model.</p>
+ * @param library
+ * @param type
* @throws CdkException
*/
- public void applyFacesConfigToModel(Iterable<File> configs) throws CdkException {
+ public void generate(ComponentLibrary library, OutputType type) throws CdkException {
+ CdkWriter generator = getGeneratorFor(type);
+ generator.render(library);
}
+
+ protected CdkWriter getGeneratorFor(OutputType type) throws CdkException {
+ CdkWriter generator = null;
+ if(StandardOutputs.COMPONENT_CLASSES.equals(type)){
+ generator = new ComponentClassGenerator();
+ } else {
+ // TODO - make service method for new source types.
+ throw new CdkException("No generator for type " + type.getName());
+ }
+ generator.init(getContext());
+ return generator;
+ }
- public ComponentLibrary buildModelFromFacesConfig(Iterable<File> configs) throws CdkException {
- ComponentLibrary library = createLibrary();
- return library;
- }
-
-
/**
- * <p class="changed_added_4_0">Builder method that creates new library instance.</p>
+ * <p class="changed_added_4_0">
+ * Builder method that creates new library instance.
+ * </p>
+ *
* @return
*/
- public ComponentLibrary createLibrary(){
+ public ComponentLibrary createLibrary() {
return new ComponentLibrary();
}
/**
- * <p class="changed_added_4_0">Getter for the current CDK context</p>
+ * <p class="changed_added_4_0">
+ * Getter for the current CDK context
+ * </p>
+ *
* @return the context
*/
protected CdkContext getContext() {
return context;
}
+
+ protected ModelBuilder getBuilderFor(SourceType type) throws CdkException {
+ ModelBuilder builder;
+ if (StandardSources.JAVA_SOURCES.equals(type)) {
+ builder = new CdkCompiler();
+ } else if (StandardSources.FACES_CONFIGS.equals(type)) {
+ builder = new FacesConfigParser();
+ } else if (StandardSources.RENDERER_TEMPLATES.equals(type)) {
+ builder = new RendererTemplateParser();
+ } else {
+ // TODO - make service method for new source types.
+ throw new CdkException("No model builder for source type " + type.getName());
+ }
+ builder.init(getContext());
+ return builder;
+ }
}
15 years, 4 months
JBoss Rich Faces SVN: r15162 - in root/cdk/trunk/plugins/generator/src/main: java/org/richfaces/cdk and 1 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2009-08-12 18:44:17 -0400 (Wed, 12 Aug 2009)
New Revision: 15162
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTagBodyConsumer.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTemplateConsumer.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/ChooseTagBodyConsumer.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/RootElementConsumer.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateBodyConsumer.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateReader.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/LibraryBuilder.java
root/cdk/trunk/plugins/generator/src/main/xsd/cdk-template.xsd
root/cdk/trunk/plugins/generator/src/main/xsd/xhtml-el.xsd
Log:
Number of issues fixed
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTagBodyConsumer.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTagBodyConsumer.java 2009-08-12 17:36:57 UTC (rev 15161)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTagBodyConsumer.java 2009-08-12 22:44:17 UTC (rev 15162)
@@ -1,5 +1,6 @@
package org.richfaces.builder.templates;
import javax.xml.namespace.QName;
+import javax.xml.stream.events.Characters;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartElement;
@@ -70,4 +71,13 @@
return this;
}
+
+ @Override
+ public void consumeCharacters(Characters characters) {
+ String trimmedText = characters.getData().trim();
+
+ if (trimmedText.length() != 0) {
+ statement.addToBody(createWriteText(characters));
+ }
+ }
}
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTemplateConsumer.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTemplateConsumer.java 2009-08-12 17:36:57 UTC (rev 15161)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTemplateConsumer.java 2009-08-12 22:44:17 UTC (rev 15162)
@@ -124,12 +124,46 @@
}
private String quote(String s) {
- return '\"' + s.replaceAll("\"", "\\\\\"") + '\"';
+ StringBuilder result = new StringBuilder();
+ result.append('\"');
+
+ char[] chars = s.toCharArray();
+ for (char c : chars) {
+
+ switch (c) {
+ case '\n':
+ result.append("\\n");
+ break;
+ case '\r':
+ result.append("\\r");
+ break;
+ case '\t':
+ result.append("\\t");
+ break;
+ case '\f':
+ result.append("\\f");
+ break;
+ case '\b':
+ result.append("\\b");
+ break;
+ case '\\':
+ result.append("\\\\");
+ break;
+ case '"':
+ result.append("\\\"");
+ break;
+ default:
+ result.append(c);
+ }
+ }
+
+ result.append('\"');
+ return result.toString();
}
protected String elExpressionToJava(String elExpression) {
if ("clientId".equalsIgnoreCase(elExpression)) {
- return "component.getClientId(facesContext)";
+ return "component.getClientId(context)";
} else {
Matcher matcher = COMPONENT_ATTRIBUTES_EXPRESSION.matcher(elExpression);
if (matcher.matches()) {
@@ -263,4 +297,9 @@
return new MethodBodyStatement(
MessageFormat.format("else if ({0}) '{'", testExpression), "}");
}
+
+ protected MethodBodyStatement createGetComponentClassMethod(String componentClassName) {
+ return new MethodBodyStatement(MessageFormat.format("return {0}.class;", componentClassName));
+ }
+
}
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/ChooseTagBodyConsumer.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/ChooseTagBodyConsumer.java 2009-08-12 17:36:57 UTC (rev 15161)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/ChooseTagBodyConsumer.java 2009-08-12 22:44:17 UTC (rev 15162)
@@ -3,6 +3,7 @@
import java.util.List;
import javax.xml.namespace.QName;
+import javax.xml.stream.events.Characters;
import javax.xml.stream.events.StartElement;
import org.richfaces.builder.model.MethodBodyStatement;
@@ -74,4 +75,13 @@
}
}
+ /* (non-Javadoc)
+ * @see org.richfaces.builder.templates.BaseTagBodyConsumer#consumeCharacters(javax.xml.stream.events.Characters)
+ */
+ @Override
+ public void consumeCharacters(Characters characters) {
+ if (characters.getData().trim().length() != 0) {
+ throw new IllegalArgumentException();
+ }
+ }
}
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/RootElementConsumer.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/RootElementConsumer.java 2009-08-12 17:36:57 UTC (rev 15161)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/RootElementConsumer.java 2009-08-12 22:44:17 UTC (rev 15162)
@@ -55,6 +55,16 @@
return null;
}
+
+ private String getSimpleClassName(String fullClassName) {
+ int lastDotIdx = fullClassName.lastIndexOf('.');
+
+ if (lastDotIdx != -1) {
+ return fullClassName.substring(lastDotIdx + 1);
+ } else {
+ return fullClassName;
+ }
+ }
private JavaClass createJavaClassByName(String fullName) {
String simpleName = null;
@@ -76,17 +86,12 @@
public Consumer consumeStartElement(StartElement startElement) {
QName name = startElement.getName();
if (isCdkNamespace(name) && "root".equals(name.getLocalPart())) {
- javaClass = new JavaClass();
- javaClass.getModifiers().add(JavaModifier.PUBLIC);
-
- javaClass.addImport(ResponseWriter.class);
- javaClass.addImport(FacesContext.class);
- javaClass.addImport(UIComponent.class);
- javaClass.addImport(Renderer.class);
String className = getAttributeValue(startElement, "class");
if (className != null) {
- javaClass.setName(className);
+ javaClass = createJavaClassByName(className);
+ } else {
+ javaClass = new JavaClass();
}
String superClassName = getAttributeValue(startElement, "superclass");
@@ -96,12 +101,17 @@
javaClass.setSuperClass(new JavaClass(Renderer.class));
}
- String packageName = getAttributeValue(startElement, "package");
- if (packageName != null) {
- javaClass.setPackage(new JavaPackage(packageName));
- }
+ javaClass.getModifiers().add(JavaModifier.PUBLIC);
- return new TemplateBodyConsumer(javaClass);
+ javaClass.addImport(ResponseWriter.class);
+ javaClass.addImport(FacesContext.class);
+ javaClass.addImport(UIComponent.class);
+ javaClass.addImport(Renderer.class);
+
+ String componentClassName = getAttributeValue(startElement, "componentclass");
+ javaClass.addImport(componentClassName);
+
+ return new TemplateBodyConsumer(javaClass, getSimpleClassName(componentClassName));
} else {
throw new IllegalArgumentException();
}
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateBodyConsumer.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateBodyConsumer.java 2009-08-12 17:36:57 UTC (rev 15161)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateBodyConsumer.java 2009-08-12 22:44:17 UTC (rev 15162)
@@ -1,5 +1,6 @@
package org.richfaces.builder.templates;
import java.io.IOException;
+import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
@@ -48,10 +49,13 @@
private List<MethodBodyStatement> statements = new ArrayList<MethodBodyStatement>();
- public TemplateBodyConsumer(JavaClass javaClass) {
+ private String componentClassName;
+
+ public TemplateBodyConsumer(JavaClass javaClass, String componentClassName) {
super();
this.javaClass = javaClass;
+ this.componentClassName = componentClassName;
}
@Override
@@ -77,8 +81,8 @@
}
private void flushStatements(String methodName) {
- JavaMethod javaMethod = new JavaMethod(methodName, new Argument("facesContext", FacesContext.class),
- new Argument("component", UIComponent.class));
+ JavaMethod javaMethod = new JavaMethod(methodName, new Argument("context", FacesContext.class),
+ new Argument("uiComponent", UIComponent.class));
javaMethod.getModifiers().add(JavaModifier.PUBLIC);
javaMethod.getExceptions().add(IOException.class);
@@ -86,7 +90,9 @@
javaMethod.setMethodBody(methodBody);
methodBody.addToBody(
- new MethodBodyStatement("ResponseWriter responseWriter = facesContext.getResponseWriter();"));
+ new MethodBodyStatement(MessageFormat.format("{0} component = ({0}) uiComponent;", componentClassName)));
+ methodBody.addToBody(
+ new MethodBodyStatement("ResponseWriter responseWriter = context.getResponseWriter();"));
for (MethodBodyStatement methodBodyStatement : statements) {
methodBody.addToBody(methodBodyStatement);
@@ -123,6 +129,13 @@
super.exit();
flushStatements("encodeEnd");
+
+ JavaMethod getComponentClassMethod = new JavaMethod("getComponentClass", Class.class);
+ getComponentClassMethod.getModifiers().add(JavaModifier.PROTECTED);
+ MethodBody methodBody = new MethodBody(getComponentClassMethod);
+ methodBody.addToBody(createGetComponentClassMethod(componentClassName));
+ getComponentClassMethod.setMethodBody(methodBody);
+ javaClass.addMethod(getComponentClassMethod);
}
}
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateReader.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateReader.java 2009-08-12 17:36:57 UTC (rev 15161)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateReader.java 2009-08-12 22:44:17 UTC (rev 15162)
@@ -20,8 +20,8 @@
*/
package org.richfaces.builder.templates;
+import java.io.IOException;
import java.io.InputStream;
-import java.io.PrintWriter;
import java.util.ArrayDeque;
import java.util.Deque;
@@ -34,7 +34,6 @@
import javax.xml.stream.events.XMLEvent;
import org.richfaces.builder.model.JavaClass;
-import org.richfaces.builder.render.JavaClassRenderer;
/**
* @author Nick Belaevski
@@ -120,37 +119,48 @@
public static JavaClass parse(InputStream stream) throws XMLStreamException {
XMLEventReader xmlEventReader = XMLInputFactoryHolder.factory.createXMLEventReader(stream);
- ConsumersTracker tracker = new ConsumersTracker();
- RootElementConsumer consumer = new RootElementConsumer();
- tracker.pushConsumer(consumer);
-
- while (xmlEventReader.hasNext()) {
- XMLEvent event = xmlEventReader.nextEvent();
+ try {
+ ConsumersTracker tracker = new ConsumersTracker();
+ RootElementConsumer consumer = new RootElementConsumer();
+ tracker.pushConsumer(consumer);
- if (event.isStartElement()) {
- StartElement startElement = event.asStartElement();
- Consumer currentConsumer = tracker.peekConsumer();
- Consumer nextConsumer = currentConsumer.consumeStartElement(startElement);
+ while (xmlEventReader.hasNext()) {
+ XMLEvent event = xmlEventReader.nextEvent();
- tracker.pushConsumer(nextConsumer);
- } else if (event.isEndElement()) {
- EndElement endElement = event.asEndElement();
- Consumer currentConsumer = tracker.popConsumer();
- currentConsumer.consumeEndElement(endElement);
- } else if (event.isCharacters()) {
- Characters characters = event.asCharacters();
- tracker.peekConsumer().consumeCharacters(characters);
+ if (event.isStartElement()) {
+ StartElement startElement = event.asStartElement();
+ Consumer currentConsumer = tracker.peekConsumer();
+ Consumer nextConsumer = currentConsumer.consumeStartElement(startElement);
+
+ tracker.pushConsumer(nextConsumer);
+ } else if (event.isEndElement()) {
+ EndElement endElement = event.asEndElement();
+ Consumer currentConsumer = tracker.popConsumer();
+ currentConsumer.consumeEndElement(endElement);
+ } else if (event.isCharacters()) {
+ Characters characters = event.asCharacters();
+ tracker.peekConsumer().consumeCharacters(characters);
+ }
}
+
+ tracker.popConsumer();
+
+ JavaClass javaClass = consumer.getJavaClass();
+ return javaClass;
+ } finally {
+ try {
+ stream.close();
+ } catch (IOException e) {
+ // TODO: handle exception
+ e.printStackTrace();
+ }
+ try {
+ xmlEventReader.close();
+ } catch (XMLStreamException e) {
+ // TODO: handle exception
+ e.printStackTrace();
+ }
}
- tracker.popConsumer();
-
- JavaClass javaClass = consumer.getJavaClass();
- return javaClass;
}
-
- public static void main(String[] args) throws Exception {
- JavaClass javaClass = TemplateReader.parse(TemplateReader.class.getResourceAsStream("/test.xml"));
- new JavaClassRenderer().render(javaClass, new PrintWriter(System.out));
- }
}
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/LibraryBuilder.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/LibraryBuilder.java 2009-08-12 17:36:57 UTC (rev 15161)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/LibraryBuilder.java 2009-08-12 22:44:17 UTC (rev 15162)
@@ -24,9 +24,13 @@
package org.richfaces.cdk;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.PrintWriter;
+import org.richfaces.builder.model.JavaClass;
+import org.richfaces.builder.render.JavaClassRenderer;
+import org.richfaces.builder.templates.TemplateReader;
import org.richfaces.cdk.apt.CdkCompiler;
-import org.richfaces.cdk.apt.CdkProcessor;
import org.richfaces.cdk.apt.ComponentProcessor;
import org.richfaces.cdk.model.ComponentLibrary;
@@ -79,6 +83,29 @@
*/
public ComponentLibrary compileRendererTemplates(Iterable<File> templates) throws CdkException {
ComponentLibrary library = createLibrary();
+
+ try {
+ for (File file : templates) {
+ JavaClass javaClass = TemplateReader.parse(new FileInputStream(file));
+
+ String fullName = javaClass.getFullName();
+
+ File outFile = new File(context.getJavaSourceOutput(),
+ fullName.replace('.', '/') + ".java");
+
+ if (outFile.exists()) {
+ outFile.delete();
+ }
+
+ outFile.getParentFile().mkdirs();
+
+ new JavaClassRenderer().render(javaClass, new PrintWriter(outFile));
+ }
+ } catch (Exception e) {
+ // TODO: handle exception
+ throw new CdkException(e.getMessage(), e);
+ }
+
return library;
}
/**
Modified: root/cdk/trunk/plugins/generator/src/main/xsd/cdk-template.xsd
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/xsd/cdk-template.xsd 2009-08-12 17:36:57 UTC (rev 15161)
+++ root/cdk/trunk/plugins/generator/src/main/xsd/cdk-template.xsd 2009-08-12 22:44:17 UTC (rev 15162)
@@ -33,6 +33,9 @@
<xs:choice>
<xs:any minOccurs="0" maxOccurs="unbounded" />
</xs:choice>
+ <xs:attribute name="class" type="xs:string" form="unqualified" use="required" />
+ <xs:attribute name="superclass" type="xs:string" form="unqualified"/>
+ <xs:attribute name="componentclass" type="xs:string" form="unqualified" use="required" />
</xs:complexType>
</xs:element>
Modified: root/cdk/trunk/plugins/generator/src/main/xsd/xhtml-el.xsd
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/xsd/xhtml-el.xsd 2009-08-12 17:36:57 UTC (rev 15161)
+++ root/cdk/trunk/plugins/generator/src/main/xsd/xhtml-el.xsd 2009-08-12 22:44:17 UTC (rev 15162)
@@ -3169,6 +3169,7 @@
<xs:attributeGroup ref="cdk:core.attrs" />
</xs:complexType>
<xs:complexType name="script.content" mixed="true">
+ <xs:group ref="cdk:structural" minOccurs="0" maxOccurs="unbounded" />
<xs:attribute name="id" type="ID"></xs:attribute>
<xs:attribute name="charset" type="Charset"></xs:attribute>
<xs:attribute use="required" name="type" type="ContentType"></xs:attribute>
15 years, 4 months
JBoss Rich Faces SVN: r15161 - in root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder: model and 2 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2009-08-12 13:36:57 -0400 (Wed, 12 Aug 2009)
New Revision: 15161
Added:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/MethodBodyStatement.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/MethodBodyStatementsContainer.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTagBodyConsumer.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTemplateConsumer.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/ChooseTagBodyConsumer.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/Consumer.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/RootElementConsumer.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/StructuralTagBodyConsumer.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateBodyConsumer.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateReader.java
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/JavaClass.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/JavaLanguageElement.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/JavaMethod.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/JavaPackage.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/MethodBody.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/render/JavaClassRenderer.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/render/JavaMethodRenderer.java
Log:
Templates compilation functionality draft check-in
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/JavaClass.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/JavaClass.java 2009-08-12 15:54:40 UTC (rev 15160)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/JavaClass.java 2009-08-12 17:36:57 UTC (rev 15161)
@@ -44,18 +44,29 @@
});
private JavaPackage pakg;
- private Class<?> superClass = Object.class;
+ private static final JavaClass DEFAULT_SUPERCLASS = new JavaClass(Object.class);
+
+ private JavaClass superClass = DEFAULT_SUPERCLASS;
+
public JavaClass(String shortName, JavaPackage pakg, Class<?> superClass) {
this(shortName, pakg);
- setSuperClass(superClass);
+ setSuperClass(new JavaClass(superClass));
}
+ public JavaClass() {
+ super();
+ }
+
public JavaClass(String shortName, JavaPackage pakg) {
super(shortName);
this.pakg = pakg;
}
+ public JavaClass(Class<?> clazz) {
+ this(clazz.getSimpleName(), new JavaPackage(clazz.getPackage()));
+ }
+
public void addImport(String name) {
imports.add(new RuntimeImport(name));
}
@@ -88,9 +99,9 @@
methods.add(method);
addImport(method.getReturnType());
- List<Class<Throwable>> exceptions = method.getExceptions();
+ List<Class<? extends Throwable>> exceptions = method.getExceptions();
- for (Class<Throwable> exception : exceptions) {
+ for (Class<? extends Throwable> exception : exceptions) {
addImport(exception);
}
@@ -123,14 +134,16 @@
public JavaPackage getPakg() {
return pakg;
}
- public Class<?> getSuperClass() {
+
+ public JavaClass getSuperClass() {
return superClass;
}
- public void setSuperClass(Class<?> superClass) {
+ public void setSuperClass(JavaClass superClass) {
this.superClass = superClass;
- addImport(superClass);
+ addImport(superClass.getFullName());
}
+
public void setPackage(JavaPackage s) {
pakg = s;
}
@@ -148,19 +161,31 @@
return imports;
}
+ public String getFullName() {
+ StringBuilder fullName = new StringBuilder();
+ fullName.append(getPackage().getName());
+ if (fullName.length() != 0) {
+ fullName.append('.');
+ fullName.append(getName());
+ }
+
+ return fullName.toString();
+ }
+
+ //FIXME: remodel this method so that it imports set is aligned when rendering
private boolean shouldAddToImports(Class<?> clas) {
boolean result = false;
if (clas != null) {
Package p = clas.getPackage();
+ JavaPackage jp = getPackage();
if (!(clas.isPrimitive() || p == null)) {
String importPackageName = p.getName();
if (importPackageName != null && importPackageName.length() != 0) {
- result = !(importPackageName.equals("java.lang") || importPackageName
- .equals(getPackage().getName()));
+ result = !(importPackageName.equals("java.lang") || (jp != null && importPackageName.equals(jp.getName())));
}
}
}
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/JavaLanguageElement.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/JavaLanguageElement.java 2009-08-12 15:54:40 UTC (rev 15160)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/JavaLanguageElement.java 2009-08-12 17:36:57 UTC (rev 15161)
@@ -37,6 +37,10 @@
private List<JavaComment> comments = new ArrayList<JavaComment>();
private String name;
+ public JavaLanguageElement() {
+ super();
+ }
+
public JavaLanguageElement(String name) {
super();
this.name = name;
@@ -58,6 +62,10 @@
return name;
}
+ public void setName(String name) {
+ this.name = name;
+ }
+
public void addModifier(JavaModifier modifier) {
modifiers.add(modifier);
}
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/JavaMethod.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/JavaMethod.java 2009-08-12 15:54:40 UTC (rev 15160)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/JavaMethod.java 2009-08-12 17:36:57 UTC (rev 15161)
@@ -36,13 +36,13 @@
private MethodBody methodBody;
private List <Argument> arguments = new ArrayList<Argument>();
- private List<Class<Throwable>> exceptions = new ArrayList<Class<Throwable>>();
+ private List<Class<? extends Throwable>> exceptions = new ArrayList<Class<? extends Throwable>>();
- public List<Class<Throwable>> getExceptions() {
+ public List<Class<? extends Throwable>> getExceptions() {
return exceptions;
}
- public void setExceptions(List<Class<Throwable>> exceptions) {
+ public void setExceptions(List<Class<? extends Throwable>> exceptions) {
this.exceptions = exceptions;
}
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/JavaPackage.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/JavaPackage.java 2009-08-12 15:54:40 UTC (rev 15160)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/JavaPackage.java 2009-08-12 17:36:57 UTC (rev 15161)
@@ -36,6 +36,10 @@
super();
this.name = name;
}
+
+ public JavaPackage(Package pkg) {
+ this(pkg.getName());
+ }
}
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/MethodBody.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/MethodBody.java 2009-08-12 15:54:40 UTC (rev 15160)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/MethodBody.java 2009-08-12 17:36:57 UTC (rev 15161)
@@ -21,19 +21,23 @@
package org.richfaces.builder.model;
+import java.util.ArrayList;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
/**
* @author Maksim Kaszynski
*
*/
-public class MethodBody {
+public class MethodBody implements MethodBodyStatementsContainer {
private JavaMethod method;
private Set<Class<?>> usedClasses = new HashSet<Class<?>>();
+ private List<MethodBodyStatement> body = new ArrayList<MethodBodyStatement>();
+
public MethodBody() {
// TODO Auto-generated constructor stub
}
@@ -51,8 +55,20 @@
}
public String toCode() {
- return "";
+ StringBuilder builder = new StringBuilder();
+
+ for (MethodBodyStatement statement : body) {
+ statement.appendTo(builder);
+ }
+
+ return builder.toString();
}
+
+ public void addToBody(MethodBodyStatement... argStatements) {
+ for (MethodBodyStatement methodBodyStatement : argStatements) {
+ body.add(methodBodyStatement);
+ }
+ }
public void addType(Class<?> clazz) {
usedClasses.add(clazz);
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/MethodBodyStatement.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/MethodBodyStatement.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/MethodBodyStatement.java 2009-08-12 17:36:57 UTC (rev 15161)
@@ -0,0 +1,78 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.builder.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+public class MethodBodyStatement implements MethodBodyStatementsContainer {
+
+ private List<MethodBodyStatement> statements = new ArrayList<MethodBodyStatement>();
+
+ private String start = null;
+
+ private String end = null;
+
+ public MethodBodyStatement() {
+ this(null);
+ }
+
+ public MethodBodyStatement(String expression) {
+ this(expression, null);
+ }
+
+ public MethodBodyStatement(String start, String end) {
+ super();
+ this.start = start;
+ this.end = end;
+ }
+
+ /**
+ * @param builder
+ */
+ public void appendTo(StringBuilder builder) {
+ if (start != null) {
+ builder.append(start);
+ builder.append('\n');
+ }
+
+ for (MethodBodyStatement statement : statements) {
+ statement.appendTo(builder);
+ builder.append('\n');
+ }
+
+ if (end != null) {
+ builder.append(end);
+ builder.append('\n');
+ }
+ }
+
+ public void addToBody(MethodBodyStatement... argStatements) {
+ for (MethodBodyStatement methodBodyStatement : argStatements) {
+ statements.add(methodBodyStatement);
+ }
+ }
+}
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/MethodBodyStatementsContainer.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/MethodBodyStatementsContainer.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/model/MethodBodyStatementsContainer.java 2009-08-12 17:36:57 UTC (rev 15161)
@@ -0,0 +1,31 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.builder.model;
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+public interface MethodBodyStatementsContainer {
+
+ public void addToBody(MethodBodyStatement... s);
+}
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/render/JavaClassRenderer.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/render/JavaClassRenderer.java 2009-08-12 15:54:40 UTC (rev 15160)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/render/JavaClassRenderer.java 2009-08-12 17:36:57 UTC (rev 15161)
@@ -62,11 +62,11 @@
renderModifiers(javaClass, out);
out.print("class " + javaClass.getName() );
- Class<?> superClass =
+ JavaClass superClass =
javaClass.getSuperClass();
if (!Object.class.getName().equals(superClass.getName())) {
- out.print(" extends " + superClass.getSimpleName());
+ out.print(" extends " + superClass.getName() + " ");
}
out.println("{");
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/render/JavaMethodRenderer.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/render/JavaMethodRenderer.java 2009-08-12 15:54:40 UTC (rev 15160)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/render/JavaMethodRenderer.java 2009-08-12 17:36:57 UTC (rev 15161)
@@ -63,12 +63,12 @@
}
}
out.print(")");
- List<Class<Throwable>> exceptions = javaMethod.getExceptions();
+ List<Class<? extends Throwable>> exceptions = javaMethod.getExceptions();
if (exceptions != null && !exceptions.isEmpty()) {
out.print(" throws ");
- for (Iterator<Class<Throwable>> iterator = exceptions.iterator(); iterator.hasNext();) {
- Class<Throwable> class1 = iterator.next();
+ for (Iterator<Class<? extends Throwable>> iterator = exceptions.iterator(); iterator.hasNext();) {
+ Class<? extends Throwable> class1 = iterator.next();
out.print(class1.getSimpleName());
if (iterator.hasNext()) {
out.print(", ");
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTagBodyConsumer.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTagBodyConsumer.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTagBodyConsumer.java 2009-08-12 17:36:57 UTC (rev 15161)
@@ -0,0 +1,73 @@
+package org.richfaces.builder.templates;
+import javax.xml.namespace.QName;
+import javax.xml.stream.events.EndElement;
+import javax.xml.stream.events.StartElement;
+
+import org.richfaces.builder.model.MethodBodyStatement;
+
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+public class BaseTagBodyConsumer extends BaseTemplateConsumer {
+
+ protected final MethodBodyStatement statement;
+
+ public BaseTagBodyConsumer(MethodBodyStatement methodBodyStatement) {
+ super();
+
+ this.statement = methodBodyStatement;
+ }
+
+ @Override
+ public void consumeEndElement(EndElement endElement) {
+ QName name = endElement.getName();
+
+ if (!isCdkNamespace(name)) {
+ statement.addToBody(createEndElement(endElement));
+ }
+ }
+
+ @Override
+ public Consumer consumeStartElement(StartElement startElement) {
+ QName name = startElement.getName();
+ if (isCdkNamespace(name)) {
+ if ("if".equals(name.getLocalPart())) {
+ MethodBodyStatement ifStatement = createIfExpression(startElement);
+
+ statement.addToBody(ifStatement);
+ return new BaseTagBodyConsumer(ifStatement);
+ } else if ("choose".equals(name.getLocalPart())) {
+ MethodBodyStatement whenStatement = new MethodBodyStatement();
+ statement.addToBody(whenStatement);
+ return new ChooseTagBodyConsumer(whenStatement);
+ }
+
+ } else {
+ statement.addToBody(createStartElement(startElement));
+ }
+
+ return this;
+ }
+}
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTemplateConsumer.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTemplateConsumer.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTemplateConsumer.java 2009-08-12 17:36:57 UTC (rev 15161)
@@ -0,0 +1,266 @@
+package org.richfaces.builder.templates;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.text.MessageFormat;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.events.Attribute;
+import javax.xml.stream.events.Characters;
+import javax.xml.stream.events.EndElement;
+import javax.xml.stream.events.StartElement;
+
+import org.richfaces.builder.model.MethodBodyStatement;
+
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+public class BaseTemplateConsumer implements Consumer {
+
+ private static final String XHTML_NAMESPACE = "http://richfaces.org/xhtml-el";
+
+ private static final String CDK_NAMESPACE = "http://richfaces.org/cdk";
+
+ private static final Map<String, Set<String>> elementsAttributes;
+
+ private static final Pattern EL_EXPRESSION = Pattern.compile("#\\{([^\\}]+)\\}");
+
+ private static final Pattern COMPONENT_ATTRIBUTES_EXPRESSION = Pattern.compile("^component\\.attributes\\[(?:'|\")?([^'\"]+)(?:'|\")?\\]$");
+
+ static {
+ InputStream serializedAttributesStream = BaseTemplateConsumer.class.getResourceAsStream("/attributes.ser");
+ try {
+ //TODO read default attributes values
+ //TODO detect URI attributes
+ ObjectInputStream ois = new ObjectInputStream(serializedAttributesStream);
+ elementsAttributes = (Map<String, Set<String>>) ois.readObject();
+ } catch (Exception e) {
+ throw new IllegalStateException(e.getMessage(), e);
+ } finally {
+ try {
+ serializedAttributesStream.close();
+ } catch (IOException e) {
+ throw new IllegalStateException(e.getMessage(), e);
+ }
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see Consumer#consumeCharacters(javax.xml.stream.events.Characters)
+ */
+ @Override
+ public void consumeCharacters(Characters characters) {
+ }
+
+ /* (non-Javadoc)
+ * @see Consumer#consumeEndElement(javax.xml.stream.events.EndElement)
+ */
+ @Override
+ public void consumeEndElement(EndElement endElement) {
+ }
+
+ /* (non-Javadoc)
+ * @see Consumer#consumeStartElement(javax.xml.stream.events.StartElement)
+ */
+ @Override
+ public Consumer consumeStartElement(StartElement startElement) {
+ return this;
+ }
+
+ /* (non-Javadoc)
+ * @see Consumer#enter()
+ */
+ @Override
+ public void enter() {
+ }
+
+ /* (non-Javadoc)
+ * @see Consumer#exit()
+ */
+ @Override
+ public void exit() {
+ }
+
+ protected boolean isDefaultNamespace(QName name) {
+ return name.getNamespaceURI().length() == 0;
+ }
+
+ protected boolean isXhtmlNamespace(QName name) {
+ return XHTML_NAMESPACE.equals(name.getNamespaceURI());
+ }
+
+ protected boolean isCdkNamespace(QName name) {
+ return CDK_NAMESPACE.equals(name.getNamespaceURI());
+ }
+
+ private String quote(String s) {
+ return '\"' + s.replaceAll("\"", "\\\\\"") + '\"';
+ }
+
+ protected String elExpressionToJava(String elExpression) {
+ if ("clientId".equalsIgnoreCase(elExpression)) {
+ return "component.getClientId(facesContext)";
+ } else {
+ Matcher matcher = COMPONENT_ATTRIBUTES_EXPRESSION.matcher(elExpression);
+ if (matcher.matches()) {
+ String componentAttributeName = matcher.group(1);
+ return MessageFormat.format("component.getAttributes().get(\"{0}\")", componentAttributeName);
+ }
+ }
+
+ return elExpression;
+ }
+
+ protected String compileEl(String elString) {
+ Matcher matcher = EL_EXPRESSION.matcher(elString);
+ StringBuffer buffer = new StringBuffer();
+
+ int start = 0;
+ int elStart;
+ while (matcher.find(start)) {
+ elStart = matcher.start();
+
+ if (elStart != start) {
+ if (buffer.length() != 0) {
+ buffer.append(" + ");
+ }
+ buffer.append(quote(elString.substring(start, elStart)));
+ }
+
+ String elExpression = matcher.group(1);
+ if (buffer.length() != 0) {
+ buffer.append(" + ");
+ }
+ buffer.append(elExpressionToJava(elExpression));
+
+
+ start = matcher.end();
+ }
+
+ if (start != elString.length()) {
+ if (buffer.length() != 0) {
+ buffer.append(" + ");
+ }
+ buffer.append(quote(elString.substring(start)));
+ }
+ return buffer.toString();
+ }
+
+ protected MethodBodyStatement createStartElement(StartElement startElement) {
+ MethodBodyStatement rootStatement = new MethodBodyStatement();
+ String elementName = startElement.getName().getLocalPart();
+ rootStatement.addToBody(new MethodBodyStatement(
+ MessageFormat.format("responseWriter.startElement(\"{0}\", component);",
+ elementName)));
+
+ Map<String, String> attributes = new LinkedHashMap<String, String>();
+ boolean usePassThrough = false;
+ Set<String> passThroughSkip = new HashSet<String>();
+
+ Iterator<Attribute> attributesItr = startElement.getAttributes();
+ while (attributesItr.hasNext()) {
+ Attribute attribute = attributesItr.next();
+ QName attributeName = attribute.getName();
+ String value = attribute.getValue();
+
+ if (isXhtmlNamespace(attributeName) || isDefaultNamespace(attributeName)) {
+ attributes.put(attributeName.getLocalPart(), value);
+ } else if (isCdkNamespace(attributeName)) {
+ if ("passThroughWithExclusions".equals(attributeName.getLocalPart())) {
+ usePassThrough = true;
+ if (!"#none".equals(value)) {
+ String[] split = value.split(",");
+ for (String s : split) {
+ passThroughSkip.add(s.trim());
+ }
+ }
+ } else {
+ throw new IllegalArgumentException(attributeName.toString());
+ }
+ } else {
+ throw new IllegalArgumentException(attributeName.toString());
+ }
+ }
+
+ if (usePassThrough) {
+ Set<String> schemaAttributes = elementsAttributes.get(elementName);
+ if (schemaAttributes != null) {
+ for (String schemaAttribute : schemaAttributes) {
+ if (passThroughSkip.contains(schemaAttribute)) {
+ continue;
+ }
+
+ if (attributes.containsKey(schemaAttribute)) {
+ continue;
+ }
+
+ attributes.put(schemaAttribute,
+ MessageFormat.format("#'{'component.attributes[{0}]'}'", schemaAttribute));
+ }
+ }
+ }
+
+ for (Entry<String, String> attributeEntry : attributes.entrySet()) {
+ //TODO add check for default values
+ rootStatement.addToBody(new MethodBodyStatement(
+ MessageFormat.format("responseWriter.writeAttribute(\"{0}\", {1}, \"{0}\");",
+ attributeEntry.getKey(), compileEl(attributeEntry.getValue()))));
+ }
+
+ return rootStatement;
+ }
+
+ protected MethodBodyStatement createEndElement(EndElement startElement) {
+ String elementName = startElement.getName().getLocalPart();
+ return new MethodBodyStatement(MessageFormat.format("responseWriter.endElement(\"{0}\");", elementName));
+ }
+
+ protected MethodBodyStatement createWriteText(Characters characters) {
+ return new MethodBodyStatement(MessageFormat.format("responseWriter.writeText({0}, component, null);",
+ compileEl(characters.getData().trim())));
+ }
+
+ protected MethodBodyStatement createIfExpression(StartElement element) {
+ Attribute testAttribute = element.getAttributeByName(new QName("test"));
+ String testExpression = compileEl(testAttribute.getValue());
+ return new MethodBodyStatement(
+ MessageFormat.format("if ({0}) '{'", testExpression), "}");
+ }
+
+ protected MethodBodyStatement createIfElseExpression(StartElement element) {
+ Attribute testAttribute = element.getAttributeByName(new QName("test"));
+ String testExpression = compileEl(testAttribute.getValue());
+ return new MethodBodyStatement(
+ MessageFormat.format("else if ({0}) '{'", testExpression), "}");
+ }
+}
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/ChooseTagBodyConsumer.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/ChooseTagBodyConsumer.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/ChooseTagBodyConsumer.java 2009-08-12 17:36:57 UTC (rev 15161)
@@ -0,0 +1,77 @@
+package org.richfaces.builder.templates;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.events.StartElement;
+
+import org.richfaces.builder.model.MethodBodyStatement;
+
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+public class ChooseTagBodyConsumer extends BaseTagBodyConsumer {
+
+ private List<MethodBodyStatement> statements = new ArrayList<MethodBodyStatement>();
+
+ public ChooseTagBodyConsumer(MethodBodyStatement methodBodyStatement) {
+ super(methodBodyStatement);
+ }
+
+ /* (non-Javadoc)
+ * @see BaseTagBodyConsumer#consumeStartElement(javax.xml.stream.events.StartElement)
+ */
+ @Override
+ public Consumer consumeStartElement(StartElement startElement) {
+ QName name = startElement.getName();
+ if (isCdkNamespace(name)) {
+ MethodBodyStatement bodyStatement;
+
+ if (statements.isEmpty()) {
+ if ("when".equals(name.getLocalPart())) {
+ bodyStatement = createIfExpression(startElement);
+ } else {
+ throw new IllegalArgumentException();
+ }
+ } else {
+ if ("when".equals(name.getLocalPart())) {
+ bodyStatement = createIfElseExpression(startElement);
+ } else if ("otherwise".equals(name.getLocalPart())) {
+ bodyStatement = new MethodBodyStatement("else {", "}");
+ } else {
+ throw new IllegalArgumentException();
+ }
+ }
+
+ statement.addToBody(bodyStatement);
+
+ statements.add(bodyStatement);
+ return new BaseTagBodyConsumer(bodyStatement);
+ } else {
+ throw new IllegalArgumentException();
+ }
+ }
+
+}
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/Consumer.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/Consumer.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/Consumer.java 2009-08-12 17:36:57 UTC (rev 15161)
@@ -0,0 +1,43 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+package org.richfaces.builder.templates;
+
+import javax.xml.stream.events.Characters;
+import javax.xml.stream.events.EndElement;
+import javax.xml.stream.events.StartElement;
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+public interface Consumer {
+
+ public void enter();
+
+ public void exit();
+
+ public Consumer consumeStartElement(StartElement startElement);
+
+ public void consumeEndElement(EndElement endElement);
+
+ public void consumeCharacters(Characters characters);
+
+}
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/RootElementConsumer.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/RootElementConsumer.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/RootElementConsumer.java 2009-08-12 17:36:57 UTC (rev 15161)
@@ -0,0 +1,110 @@
+package org.richfaces.builder.templates;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.render.Renderer;
+import javax.xml.namespace.QName;
+import javax.xml.stream.events.Attribute;
+import javax.xml.stream.events.StartElement;
+
+import org.richfaces.builder.model.JavaClass;
+import org.richfaces.builder.model.JavaModifier;
+import org.richfaces.builder.model.JavaPackage;
+
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+public class RootElementConsumer extends BaseTemplateConsumer {
+
+ private JavaClass javaClass;
+
+ public JavaClass getJavaClass() {
+ return javaClass;
+ }
+
+ private String getAttributeValue(StartElement element, String attributeName) {
+ Attribute attribute = element.getAttributeByName(new QName(attributeName));
+ if (attribute != null) {
+ String attributeValue = attribute.getValue();
+ if (attributeValue != null && attributeValue.length() != 0) {
+ return attributeValue;
+ }
+ }
+
+ return null;
+ }
+
+ private JavaClass createJavaClassByName(String fullName) {
+ String simpleName = null;
+ String packageName = "";
+
+ int lastDotIdx = fullName.lastIndexOf('.');
+
+ if (lastDotIdx != -1) {
+ simpleName = fullName.substring(lastDotIdx + 1);
+ packageName = fullName.substring(0, lastDotIdx);
+ } else {
+ simpleName = fullName;
+ }
+
+ return new JavaClass(simpleName, new JavaPackage(packageName));
+ }
+
+ @Override
+ public Consumer consumeStartElement(StartElement startElement) {
+ QName name = startElement.getName();
+ if (isCdkNamespace(name) && "root".equals(name.getLocalPart())) {
+ javaClass = new JavaClass();
+ javaClass.getModifiers().add(JavaModifier.PUBLIC);
+
+ javaClass.addImport(ResponseWriter.class);
+ javaClass.addImport(FacesContext.class);
+ javaClass.addImport(UIComponent.class);
+ javaClass.addImport(Renderer.class);
+
+ String className = getAttributeValue(startElement, "class");
+ if (className != null) {
+ javaClass.setName(className);
+ }
+
+ String superClassName = getAttributeValue(startElement, "superclass");
+ if (superClassName != null) {
+ javaClass.setSuperClass(createJavaClassByName(superClassName));
+ } else {
+ javaClass.setSuperClass(new JavaClass(Renderer.class));
+ }
+
+ String packageName = getAttributeValue(startElement, "package");
+ if (packageName != null) {
+ javaClass.setPackage(new JavaPackage(packageName));
+ }
+
+ return new TemplateBodyConsumer(javaClass);
+ } else {
+ throw new IllegalArgumentException();
+ }
+ }
+
+}
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/StructuralTagBodyConsumer.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/StructuralTagBodyConsumer.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/StructuralTagBodyConsumer.java 2009-08-12 17:36:57 UTC (rev 15161)
@@ -0,0 +1,75 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+package org.richfaces.builder.templates;
+import javax.xml.namespace.QName;
+import javax.xml.stream.events.Characters;
+import javax.xml.stream.events.EndElement;
+import javax.xml.stream.events.StartElement;
+
+import org.richfaces.builder.model.MethodBodyStatement;
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+public class StructuralTagBodyConsumer extends BaseTemplateConsumer {
+
+ private MethodBodyStatement statement;
+
+ public StructuralTagBodyConsumer(MethodBodyStatement methodBodyStatement) {
+ super();
+
+ this.statement = methodBodyStatement;
+ }
+
+ @Override
+ public void consumeCharacters(Characters characters) {
+ String trimmedText = characters.getData().trim();
+
+ if (trimmedText.length() != 0) {
+ statement.addToBody(createWriteText(characters));
+ }
+ }
+
+ @Override
+ public void consumeEndElement(EndElement endElement) {
+ QName name = endElement.getName();
+
+ if (isCdkNamespace(name) && name.getLocalPart().equals("body")) {
+ throw new IllegalArgumentException();
+ } else {
+ statement.addToBody(createEndElement(endElement));
+ }
+ }
+
+ @Override
+ public Consumer consumeStartElement(StartElement startElement) {
+ QName name = startElement.getName();
+ if (isCdkNamespace(name) && name.getLocalPart().equals("body")) {
+ throw new IllegalArgumentException();
+ } else {
+ statement.addToBody(createStartElement(startElement));
+ }
+
+ return this;
+ }
+
+}
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateBodyConsumer.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateBodyConsumer.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateBodyConsumer.java 2009-08-12 17:36:57 UTC (rev 15161)
@@ -0,0 +1,128 @@
+package org.richfaces.builder.templates;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.xml.namespace.QName;
+import javax.xml.stream.events.Characters;
+import javax.xml.stream.events.EndElement;
+import javax.xml.stream.events.StartElement;
+
+import org.richfaces.builder.model.Argument;
+import org.richfaces.builder.model.JavaClass;
+import org.richfaces.builder.model.JavaMethod;
+import org.richfaces.builder.model.JavaModifier;
+import org.richfaces.builder.model.MethodBody;
+import org.richfaces.builder.model.MethodBodyStatement;
+
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+public class TemplateBodyConsumer extends BaseTemplateConsumer {
+
+ private JavaClass javaClass;
+
+ private List<MethodBodyStatement> statements = new ArrayList<MethodBodyStatement>();
+
+ public TemplateBodyConsumer(JavaClass javaClass) {
+ super();
+
+ this.javaClass = javaClass;
+ }
+
+ @Override
+ public void consumeCharacters(Characters characters) {
+ String trimmedText = characters.getData().trim();
+
+ if (trimmedText.length() != 0) {
+ statements.add(createWriteText(characters));
+ }
+ }
+
+ @Override
+ public void consumeEndElement(EndElement endElement) {
+ QName name = endElement.getName();
+
+ if (isCdkNamespace(name)) {
+ if (name.getLocalPart().equals("body")) {
+ flushStatements("encodeChildren");
+ }
+ } else {
+ statements.add(createEndElement(endElement));
+ }
+ }
+
+ private void flushStatements(String methodName) {
+ JavaMethod javaMethod = new JavaMethod(methodName, new Argument("facesContext", FacesContext.class),
+ new Argument("component", UIComponent.class));
+
+ javaMethod.getModifiers().add(JavaModifier.PUBLIC);
+ javaMethod.getExceptions().add(IOException.class);
+ MethodBody methodBody = new MethodBody(javaMethod);
+ javaMethod.setMethodBody(methodBody);
+
+ methodBody.addToBody(
+ new MethodBodyStatement("ResponseWriter responseWriter = facesContext.getResponseWriter();"));
+
+ for (MethodBodyStatement methodBodyStatement : statements) {
+ methodBody.addToBody(methodBodyStatement);
+ }
+ statements.clear();
+
+ javaClass.addMethod(javaMethod);
+ }
+
+ @Override
+ public Consumer consumeStartElement(StartElement startElement) {
+ QName name = startElement.getName();
+ if (isCdkNamespace(name)) {
+ if ("body".equals(name.getLocalPart())) {
+ flushStatements("encodeBegin");
+ } else if ("if".equals(name.getLocalPart())) {
+ MethodBodyStatement ifStatement = createIfExpression(startElement);
+ statements.add(ifStatement);
+ return new StructuralTagBodyConsumer(ifStatement);
+ } else if ("choose".equals(name.getLocalPart())) {
+ MethodBodyStatement chooseStatement = new MethodBodyStatement();
+ statements.add(chooseStatement);
+ return new ChooseTagBodyConsumer(chooseStatement);
+ }
+ } else {
+ statements.add(createStartElement(startElement));
+ }
+
+ return this;
+ }
+
+ @Override
+ public void exit() {
+ super.exit();
+
+ flushStatements("encodeEnd");
+ }
+
+}
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateReader.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateReader.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateReader.java 2009-08-12 17:36:57 UTC (rev 15161)
@@ -0,0 +1,156 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.builder.templates;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.util.ArrayDeque;
+import java.util.Deque;
+
+import javax.xml.stream.XMLEventReader;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.events.Characters;
+import javax.xml.stream.events.EndElement;
+import javax.xml.stream.events.StartElement;
+import javax.xml.stream.events.XMLEvent;
+
+import org.richfaces.builder.model.JavaClass;
+import org.richfaces.builder.render.JavaClassRenderer;
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+public class TemplateReader {
+
+ private static final class ConsumersTracker {
+
+ private final class ConsumerEntry {
+
+ public ConsumerEntry(Consumer consumer) {
+ this.consumer = consumer;
+ }
+
+ private Consumer consumer;
+
+ private int depth = 0;
+
+ public void increaseDepth() {
+ depth++;
+ }
+
+ public void decreaseDepth() {
+ depth--;
+ }
+
+ public boolean isZeroDepth() {
+ return depth == 0;
+ }
+ }
+
+ private Deque<ConsumerEntry> consumerEntries = new ArrayDeque<ConsumerEntry>();
+
+ private ConsumerEntry consumerEntry = null;
+
+ public void pushConsumer(Consumer consumer) {
+ if (consumerEntry != null && consumer == consumerEntry.consumer) {
+ consumerEntry.increaseDepth();
+ } else {
+ if (consumerEntry != null) {
+ consumerEntries.push(consumerEntry);
+ }
+
+ consumerEntry = new ConsumerEntry(consumer);
+ consumer.enter();
+ }
+ }
+
+ public Consumer peekConsumer() {
+ return consumerEntry.consumer;
+ }
+
+ public Consumer popConsumer() {
+ if (consumerEntry.isZeroDepth()) {
+ consumerEntry.consumer.exit();
+ if (!consumerEntries.isEmpty()) {
+ consumerEntry = consumerEntries.pop();
+ } else {
+ consumerEntry = null;
+ }
+ } else {
+ consumerEntry.decreaseDepth();
+ }
+
+ if (consumerEntry != null) {
+ return consumerEntry.consumer;
+ } else {
+ return null;
+ }
+ }
+ }
+
+ private static class XMLInputFactoryHolder {
+ static final XMLInputFactory factory = XMLInputFactory.newInstance();
+
+ static {
+ factory.setProperty("javax.xml.stream.isNamespaceAware", Boolean.TRUE);
+ factory.setProperty("javax.xml.stream.isCoalescing", Boolean.TRUE);
+ }
+ }
+
+ public static JavaClass parse(InputStream stream) throws XMLStreamException {
+ XMLEventReader xmlEventReader = XMLInputFactoryHolder.factory.createXMLEventReader(stream);
+
+ ConsumersTracker tracker = new ConsumersTracker();
+ RootElementConsumer consumer = new RootElementConsumer();
+ tracker.pushConsumer(consumer);
+
+ while (xmlEventReader.hasNext()) {
+ XMLEvent event = xmlEventReader.nextEvent();
+
+ if (event.isStartElement()) {
+ StartElement startElement = event.asStartElement();
+ Consumer currentConsumer = tracker.peekConsumer();
+ Consumer nextConsumer = currentConsumer.consumeStartElement(startElement);
+
+ tracker.pushConsumer(nextConsumer);
+ } else if (event.isEndElement()) {
+ EndElement endElement = event.asEndElement();
+ Consumer currentConsumer = tracker.popConsumer();
+ currentConsumer.consumeEndElement(endElement);
+ } else if (event.isCharacters()) {
+ Characters characters = event.asCharacters();
+ tracker.peekConsumer().consumeCharacters(characters);
+ }
+ }
+
+ tracker.popConsumer();
+
+ JavaClass javaClass = consumer.getJavaClass();
+ return javaClass;
+ }
+
+ public static void main(String[] args) throws Exception {
+ JavaClass javaClass = TemplateReader.parse(TemplateReader.class.getResourceAsStream("/test.xml"));
+ new JavaClassRenderer().render(javaClass, new PrintWriter(System.out));
+ }
+}
15 years, 4 months
JBoss Rich Faces SVN: r15160 - root/cdk/trunk/plugins/generator.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2009-08-12 11:54:40 -0400 (Wed, 12 Aug 2009)
New Revision: 15160
Modified:
root/cdk/trunk/plugins/generator/pom.xml
Log:
Groovy schema attributes generator added to project configuration
Modified: root/cdk/trunk/plugins/generator/pom.xml
===================================================================
--- root/cdk/trunk/plugins/generator/pom.xml 2009-08-12 15:53:08 UTC (rev 15159)
+++ root/cdk/trunk/plugins/generator/pom.xml 2009-08-12 15:54:40 UTC (rev 15160)
@@ -12,9 +12,63 @@
<artifactId>generator</artifactId>
<version>4.0.0-SNAPSHOT</version>
<name>Java Server Faces component generator</name>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>com.sun.xsom</groupId>
+ <artifactId>xsom</artifactId>
+ <version>20081112</version>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.xml.bind</groupId>
+ <artifactId>jaxb-xjc</artifactId>
+ <version>2.0.3</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
<build>
<plugins>
<plugin>
+ <groupId>org.codehaus.groovy.maven</groupId>
+ <artifactId>gmaven-plugin</artifactId>
+ <version>1.0-rc-5</version>
+ <executions>
+ <execution>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>execute</goal>
+ </goals>
+ <configuration>
+ <properties>
+ <sourceSchema>src/main/xsd/xhtml-el.xsd</sourceSchema>
+ <targetNamespace>http://richfaces.org/xhtml-el</targetNamespace>
+ <outputFile>attributes.ser</outputFile>
+ </properties>
+ <classpath>
+ <element>
+ <groupId>com.sun.xsom</groupId>
+ <artifactId>xsom</artifactId>
+ </element>
+ <element>
+ <groupId>com.sun.xml.bind</groupId>
+ <artifactId>jaxb-xjc</artifactId>
+ </element>
+ </classpath>
+ <source>${project.basedir}/src/main/script/SchemaAttributesParserTask.groovy</source>
+ </configuration>
+ </execution>
+ </executions>
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.groovy.maven.runtime</groupId>
+ <artifactId>gmaven-runtime-1.6</artifactId>
+ <version>1.0-rc-5</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ <plugin>
<artifactId>maven-compiler-plugin</artifactId>
<inherited>true</inherited>
<configuration>
15 years, 4 months
JBoss Rich Faces SVN: r15159 - in root/cdk/trunk/plugins/generator/src/main: script and 1 other directory.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2009-08-12 11:53:08 -0400 (Wed, 12 Aug 2009)
New Revision: 15159
Added:
root/cdk/trunk/plugins/generator/src/main/script/
root/cdk/trunk/plugins/generator/src/main/script/SchemaAttributesParserTask.groovy
Log:
Groovy schema attributes generator for CDK
Added: root/cdk/trunk/plugins/generator/src/main/script/SchemaAttributesParserTask.groovy
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/script/SchemaAttributesParserTask.groovy (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/script/SchemaAttributesParserTask.groovy 2009-08-12 15:53:08 UTC (rev 15159)
@@ -0,0 +1,94 @@
+import java.lang.Exception
+import java.io.FileOutputStream
+import java.io.*;
+import java.util.*;
+import com.sun.xml.xsom.*;
+import com.sun.xml.xsom.parser.*;
+
+/**
+ * This class reads possible attributes from schema and writes serialized map of attributes
+ * for each element
+ */
+class SchemaParser {
+
+ Map<String, Set<String>> attributes = new HashMap<String, Set<String>>();
+
+ private Set<String> getAttributesSet(String elementName) {
+ Set<String> attributesSet = attributes.get(elementName);
+ if (attributesSet == null) {
+ attributesSet = new HashSet<String>();
+ attributes.put(elementName, attributesSet);
+ }
+
+ return attributesSet;
+ }
+
+ public void serialize(OutputStream os) throws Exception {
+ ObjectOutputStream oos = null;
+ try {
+ oos = new ObjectOutputStream(os);
+ oos.writeObject(attributes);
+ } finally {
+ try {
+ if (oos != null) {
+ oos.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public void parse(String schemaSource, String namespace) throws Exception {
+ XSOMParser parser = new XSOMParser();
+ parser.parse(new File(schemaSource));
+ XSSchemaSet sset = parser.getResult();
+ XSSchema cdkXhtmlSchema = sset.getSchema(namespace);
+
+ Iterator<XSElementDecl> elements = cdkXhtmlSchema.iterateElementDecls();
+ while (elements.hasNext()) {
+ XSElementDecl element = elements.next();
+ XSComplexType complexType = element.getType().asComplexType();
+ if (complexType != null) {
+ Set<String> attributesSet = getAttributesSet(element.getName());
+
+ Collection<? extends XSAttributeUse> uses = complexType.getAttributeUses();
+ for (XSAttributeUse xsAttributeUse : uses) {
+ XSAttributeDecl attributeDecl = xsAttributeUse.getDecl();
+ String attributeNamespace = attributeDecl.getTargetNamespace();
+ if (namespace.equals(attributeNamespace) || attributeNamespace.length() == 0) {
+ attributesSet.add(attributeDecl.getName());
+ }
+ }
+ }
+ }
+ }
+}
+
+try {
+ def targetNamespaceParam = project.properties['targetNamespace'];
+
+ def sourceSchemaParam = project.properties['sourceSchema'];
+ String sourceSchemaFileName = project.basedir.getAbsolutePath() + '/' + sourceSchemaParam;
+
+ def outputFileParam = project.properties['outputFile'];
+ String outputFileName = project.build.outputDirectory + '/' + outputFileParam;
+
+ log.info("Parsing: " + sourceSchemaFileName);
+ log.info("Writing serialized attributes to: " + outputFileName);
+
+ File outputFile = new File(outputFileName);
+
+ outputFile.getParentFile().mkdirs();
+
+ if (outputFile.exists()) {
+ outputFile.delete();
+ }
+ outputFile.createNewFile();
+
+ SchemaParser parser = new SchemaParser();
+ parser.parse(sourceSchemaFileName, targetNamespaceParam);
+ parser.serialize(new FileOutputStream(outputFileName));
+} catch (Exception e) {
+ fail(e);
+}
15 years, 4 months
JBoss Rich Faces SVN: r15158 - in branches/community/3.3.X/test-applications/seamApp: ear and 2 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: mvitenkov
Date: 2009-08-12 10:24:45 -0400 (Wed, 12 Aug 2009)
New Revision: 15158
Modified:
branches/community/3.3.X/test-applications/seamApp/ear/pom.xml
branches/community/3.3.X/test-applications/seamApp/pom.xml
branches/community/3.3.X/test-applications/seamApp/web/pom.xml
branches/community/3.3.X/test-applications/seamApp/web/src/main/webapp/pages/Rich/Rich.xhtml
Log:
add jboss 5.1.0.GA support
Modified: branches/community/3.3.X/test-applications/seamApp/ear/pom.xml
===================================================================
--- branches/community/3.3.X/test-applications/seamApp/ear/pom.xml 2009-08-12 13:35:00 UTC (rev 15157)
+++ branches/community/3.3.X/test-applications/seamApp/ear/pom.xml 2009-08-12 14:24:45 UTC (rev 15158)
@@ -40,7 +40,7 @@
<groupId>javax.el</groupId>
</exclusion>
<exclusion>
- <groupId>org.jboss.seam</groupId>
+ <groupId>org.jboss.el</groupId>
<artifactId>jboss-el</artifactId>
</exclusion>
<exclusion>
@@ -118,16 +118,10 @@
</exclusions>
</dependency>
<dependency>
- <groupId>org.jboss.seam</groupId>
+ <groupId>org.jboss.el</groupId>
<artifactId>jboss-el</artifactId>
- <version>2.0.0.GA</version>
- <exclusions>
- <exclusion>
- <artifactId>el-api</artifactId>
- <groupId>javax.el</groupId>
- </exclusion>
- </exclusions>
- </dependency>
+ <version>2.0.2.CR1</version>
+ </dependency>
</dependencies>
<build>
<finalName>${projectName}-ear-1.0-SNAPSHOT</finalName>
Modified: branches/community/3.3.X/test-applications/seamApp/pom.xml
===================================================================
--- branches/community/3.3.X/test-applications/seamApp/pom.xml 2009-08-12 13:35:00 UTC (rev 15157)
+++ branches/community/3.3.X/test-applications/seamApp/pom.xml 2009-08-12 14:24:45 UTC (rev 15158)
@@ -13,7 +13,7 @@
<jbossDownloadURL>http://downloads.sourceforge.net/jboss/jboss-4.2.2.GA.zip</jbossDownloadURL>
<jbossDeployDir>jboss-4.2.2.GA/jboss-4.2.2.GA/server/default/</jbossDeployDir>
<droolsVersion>4.0.0</droolsVersion>
- <faceletsVersion>1.1.14</faceletsVersion>
+ <faceletsVersion>1.1.15.B1</faceletsVersion>
<installDir>E:/apps/jboss</installDir>
</properties>
<repositories>
Modified: branches/community/3.3.X/test-applications/seamApp/web/pom.xml
===================================================================
--- branches/community/3.3.X/test-applications/seamApp/web/pom.xml 2009-08-12 13:35:00 UTC (rev 15157)
+++ branches/community/3.3.X/test-applications/seamApp/web/pom.xml 2009-08-12 14:24:45 UTC (rev 15158)
@@ -29,36 +29,7 @@
<groupId>org.jboss.seam</groupId>
<artifactId>jboss-seam</artifactId>
<version>${seamVersion}</version>
- <exclusions>
- <exclusion>
- <groupId>org.jboss.seam</groupId>
- <artifactId>jboss-el</artifactId>
- </exclusion>
- <exclusion>
- <groupId>commons-collections</groupId>
- <artifactId>commons-collections</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.jboss.seam</groupId>
- <artifactId>jboss-seam-pdf</artifactId>
- </exclusion>
- <exclusion>
- <groupId>dom4j</groupId>
- <artifactId>dom4j</artifactId>
- </exclusion>
- <exclusion>
- <groupId>jboss</groupId>
- <artifactId>javassist</artifactId>
- </exclusion>
- <exclusion>
- <groupId>xerces</groupId>
- <artifactId>xercesImpl</artifactId>
- </exclusion>
- <exclusion>
- <groupId>xml-apis</groupId>
- <artifactId>xml-apis</artifactId>
- </exclusion>
- </exclusions>
+ <scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
@@ -96,7 +67,7 @@
<dependency>
<groupId>com.sun.facelets</groupId>
<artifactId>jsf-facelets</artifactId>
- <version>1.1.14</version>
+ <version>1.1.15.B1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
@@ -125,12 +96,22 @@
<groupId>com.sun.facelets</groupId>
<artifactId>jsf-facelets</artifactId>
</exclusion>
+ <exclusion>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-seam</artifactId>
+ </exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jboss.seam</groupId>
<artifactId>jboss-seam-ui</artifactId>
<version>${seamVersion}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-seam</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
</dependencies>
<build>
Modified: branches/community/3.3.X/test-applications/seamApp/web/src/main/webapp/pages/Rich/Rich.xhtml
===================================================================
--- branches/community/3.3.X/test-applications/seamApp/web/src/main/webapp/pages/Rich/Rich.xhtml 2009-08-12 13:35:00 UTC (rev 15157)
+++ branches/community/3.3.X/test-applications/seamApp/web/src/main/webapp/pages/Rich/Rich.xhtml 2009-08-12 14:24:45 UTC (rev 15158)
@@ -43,15 +43,15 @@
<h:panelGrid id="richGridID" columns="1" width="100%">
<h:panelGroup rendered="#{option.reComponent}">
- <ui:include src="#{richBean.pathComponent}"/>
+ <ui:include src="${richBean.pathComponent}"/>
</h:panelGroup>
<h:panelGroup rendered="#{option.reStraightforward}">
- <ui:include src="#{richBean.pathStraightforward}" />
+ <ui:include src="${richBean.pathStraightforward}" />
</h:panelGroup>
<h:panelGroup rendered="#{option.reProperty}">
- <ui:include src="#{richBean.pathProperty}" />
+ <ui:include src="${richBean.pathProperty}" />
</h:panelGroup>
<a4j:log popup="false" rendered="#{option.log}"></a4j:log>
</h:panelGrid>
15 years, 4 months
JBoss Rich Faces SVN: r15157 - root/cdk/trunk/plugins/generator/src/main/xsd.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2009-08-12 09:35:00 -0400 (Wed, 12 Aug 2009)
New Revision: 15157
Added:
root/cdk/trunk/plugins/generator/src/main/xsd/cdk-template.xsd
root/cdk/trunk/plugins/generator/src/main/xsd/xhtml-el.xsd
Removed:
root/cdk/trunk/plugins/generator/src/main/xsd/cdk-tags.xsd
root/cdk/trunk/plugins/generator/src/main/xsd/xhtml1-transitional.xsd
Log:
Template schemas updated and files renamed
Deleted: root/cdk/trunk/plugins/generator/src/main/xsd/cdk-tags.xsd
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/xsd/cdk-tags.xsd 2009-08-11 12:13:51 UTC (rev 15156)
+++ root/cdk/trunk/plugins/generator/src/main/xsd/cdk-tags.xsd 2009-08-12 13:35:00 UTC (rev 15157)
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
- targetNamespace="http://richfaces.org/cdk" xmlns="http://richfaces.org/cdk"
- elementFormDefault="qualified" attributeFormDefault="qualified"
- xmlns:xhtml="http://richfaces.org/xhtml-el">
-
- <xs:attributeGroup name="core.attrs">
- <xs:attribute name="passThrough" />
- </xs:attributeGroup>
-
- <xs:element name="root">
- <xs:complexType mixed="true">
- <xs:choice>
- <xs:any minOccurs="0" maxOccurs="unbounded" />
- </xs:choice>
- </xs:complexType>
- </xs:element>
-
- <xs:group name="structural">
- <xs:choice>
- <xs:element name="body">
- <xs:complexType mixed="true">
- <xs:choice>
- <xs:any minOccurs="0" maxOccurs="unbounded" />
- </xs:choice>
- </xs:complexType>
- </xs:element>
- <xs:element name="if">
- <xs:complexType mixed="true">
- <xs:choice>
- <xs:any minOccurs="0" maxOccurs="unbounded" />
- </xs:choice>
- </xs:complexType>
- </xs:element>
- <xs:element name="choose">
- <xs:complexType>
- <xs:sequence>
- <xs:element maxOccurs="unbounded" name="when">
- <xs:complexType>
- <xs:choice>
- <xs:any minOccurs="0" maxOccurs="unbounded" />
- </xs:choice>
- </xs:complexType>
- </xs:element>
- <xs:element minOccurs="0" name="otherwise">
- <xs:complexType>
- <xs:choice>
- <xs:any minOccurs="0" maxOccurs="unbounded" />
- </xs:choice>
- </xs:complexType>
- </xs:element>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- </xs:choice>
- </xs:group>
-
-
-</xs:schema>
Copied: root/cdk/trunk/plugins/generator/src/main/xsd/cdk-template.xsd (from rev 15156, root/cdk/trunk/plugins/generator/src/main/xsd/cdk-tags.xsd)
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/xsd/cdk-template.xsd (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/xsd/cdk-template.xsd 2009-08-12 13:35:00 UTC (rev 15157)
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://richfaces.org/cdk" xmlns="http://richfaces.org/cdk"
+ elementFormDefault="qualified" attributeFormDefault="qualified"
+ xmlns:xhtml="http://richfaces.org/xhtml-el">
+
+ <xs:simpleType name="elStrictExpression">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="#\{[^\}]+\}" />
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="elMixedExpression">
+ <xs:restriction base="xs:string">
+ <xs:pattern value=".*#\{[^\}]+\}.*" />
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="elFreeformExpression">
+ <xs:restriction base="xs:string" />
+ </xs:simpleType>
+
+ <xs:attributeGroup name="core.attrs">
+ <xs:attribute name="passThroughWithExclusions" type="xs:NMTOKENS" />
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="testGroup">
+ <xs:attribute name="test" form="unqualified" use="required" type="elStrictExpression" />
+ </xs:attributeGroup>
+
+ <xs:element name="root">
+ <xs:complexType mixed="true">
+ <xs:choice>
+ <xs:any minOccurs="0" maxOccurs="unbounded" />
+ </xs:choice>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:group name="structural">
+ <xs:choice>
+ <xs:element name="body">
+ <xs:complexType mixed="true">
+ <xs:choice>
+ <xs:any minOccurs="0" maxOccurs="unbounded" />
+ </xs:choice>
+ </xs:complexType>
+ </xs:element>
+ <xs:element ref="if" />
+ <xs:element ref="choose" />
+ </xs:choice>
+ </xs:group>
+
+
+ <xs:element name="if">
+ <xs:complexType mixed="true">
+ <xs:choice>
+ <xs:any minOccurs="0" maxOccurs="unbounded" />
+ </xs:choice>
+ <xs:attributeGroup ref="testGroup" />
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="choose">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" name="when">
+ <xs:complexType>
+ <xs:choice>
+ <xs:any minOccurs="0"
+ maxOccurs="unbounded">
+ </xs:any>
+ </xs:choice>
+ <xs:attributeGroup ref="testGroup" />
+ </xs:complexType>
+ </xs:element>
+ <xs:element minOccurs="0" name="otherwise">
+ <xs:complexType>
+ <xs:choice>
+ <xs:any minOccurs="0"
+ maxOccurs="unbounded">
+ </xs:any>
+ </xs:choice>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
Copied: root/cdk/trunk/plugins/generator/src/main/xsd/xhtml-el.xsd (from rev 15156, root/cdk/trunk/plugins/generator/src/main/xsd/xhtml1-transitional.xsd)
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/xsd/xhtml-el.xsd (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/xsd/xhtml-el.xsd 2009-08-12 13:35:00 UTC (rev 15157)
@@ -0,0 +1,3374 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema version="1.0" xml:lang="en"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://richfaces.org/xhtml-el"
+ xmlns="http://richfaces.org/xhtml-el" xmlns:xml="http://www.w3.org/XML/1998/namespace"
+ elementFormDefault="qualified" xmlns:cdk="http://richfaces.org/cdk">
+
+ <xs:import schemaLocation="cdk-template.xsd" namespace="http://richfaces.org/cdk" />
+
+ <xs:annotation>
+ <xs:documentation>
+ XHTML 1.0 (Second Edition) Transitional in XML
+ Schema
+
+ This is the same as HTML 4 Transitional except for
+ changes due
+ to the differences between XML and SGML.
+
+ Namespace =
+ http://www.w3.org/1999/xhtml
+
+ For further information, see:
+ http://www.w3.org/TR/xhtml1
+
+ Copyright (c) 1998-2002 W3C (MIT, INRIA,
+ Keio),
+ All Rights Reserved.
+
+ The DTD version is identified by the PUBLIC
+ and SYSTEM identifiers:
+
+ PUBLIC "-//W3C//DTD XHTML 1.0
+ Transitional//EN"
+ SYSTEM
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
+
+ $Id:
+ xhtml1-transitional.xsd,v 1.5 2002/08/28 09:53:29 mimasa Exp $
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:import namespace="http://www.w3.org/XML/1998/namespace"
+ schemaLocation="http://www.w3.org/2001/xml.xsd" />
+
+ <xs:annotation>
+ <xs:documentation>
+ ================ Character mnemonic entities
+ =========================
+
+ XHTML entity sets are identified by the
+ PUBLIC and SYSTEM identifiers:
+
+ PUBLIC "-//W3C//ENTITIES Latin 1 for
+ XHTML//EN"
+ SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"
+
+ PUBLIC "-//W3C//ENTITIES Special for XHTML//EN"
+ SYSTEM
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent"
+
+ PUBLIC
+ "-//W3C//ENTITIES Symbols for XHTML//EN"
+ SYSTEM
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent"
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================== Imported Names
+ ====================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:simpleType name="ContentType">
+ <xs:annotation>
+ <xs:documentation>
+ media type, as per [RFC2045]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+
+ <xs:simpleType name="ContentTypes">
+ <xs:annotation>
+ <xs:documentation>
+ comma-separated list of media types, as per
+ [RFC2045]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+
+ <xs:simpleType name="Charset">
+ <xs:annotation>
+ <xs:documentation>
+ a character encoding, as per [RFC2045]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+
+ <xs:simpleType name="Charsets">
+ <xs:annotation>
+ <xs:documentation>
+ a space separated list of character encodings, as
+ per [RFC2045]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+
+ <xs:simpleType name="LanguageCode">
+ <xs:annotation>
+ <xs:documentation>
+ a language code, as per [RFC3066]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:union memberTypes="xs:language cdk:elMixedExpression" />
+ </xs:simpleType>
+
+ <xs:simpleType name="Character">
+ <xs:annotation>
+ <xs:documentation>
+ a single character, as per section 2.2 of [XML]
+ </xs:documentation>
+ </xs:annotation>
+ <!-- TODO test -->
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:length value="1" fixed="true" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+
+ <xs:simpleType name="simpleType.Number">
+ <xs:restriction base="xs:nonNegativeInteger">
+ <xs:pattern value="[0-9]+" />
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="Number">
+ <xs:annotation>
+ <xs:documentation>
+ one or more digits
+ </xs:documentation>
+ </xs:annotation>
+ <xs:union memberTypes="simpleType.Number cdk:elMixedExpression" />
+ </xs:simpleType>
+
+ <xs:simpleType name="tabindexNumber">
+ <xs:annotation>
+ <xs:documentation>
+ tabindex attribute specifies the position of the
+ current element
+ in the tabbing order for the current document. This
+ value must be
+ a number between 0 and 32767. User agents should ignore
+ leading
+ zeros.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="simpleType.Number">
+ <xs:minInclusive value="0" />
+ <xs:maxInclusive value="32767" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elMixedExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+
+ <xs:simpleType name="LinkTypes">
+ <xs:annotation>
+ <xs:documentation>
+ space-separated list of link types
+ </xs:documentation>
+ </xs:annotation>
+ <xs:union memberTypes="xs:NMTOKENS cdk:elMixedExpression" />
+ </xs:simpleType>
+
+ <xs:simpleType name="MediaDesc">
+ <xs:annotation>
+ <xs:documentation>
+ single or comma-separated list of media descriptors
+ </xs:documentation>
+ </xs:annotation>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[^,]+(,\s*[^,]+)*" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+
+ <xs:simpleType name="URI">
+ <xs:annotation>
+ <xs:documentation>
+ a Uniform Resource Identifier, see [RFC2396]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:union memberTypes="xs:anyURI cdk:elMixedExpression" />
+ </xs:simpleType>
+
+ <xs:simpleType name="UriList">
+ <xs:annotation>
+ <xs:documentation>
+ a space separated list of Uniform Resource
+ Identifiers
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+
+ <xs:simpleType name="Datetime">
+ <xs:annotation>
+ <xs:documentation>
+ date and time information. ISO date format
+ </xs:documentation>
+ </xs:annotation>
+ <xs:union memberTypes="xs:dateTime cdk:elMixedExpression" />
+ </xs:simpleType>
+
+ <xs:simpleType name="Script">
+ <xs:annotation>
+ <xs:documentation>
+ script expression
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+
+ <xs:simpleType name="StyleSheet">
+ <xs:annotation>
+ <xs:documentation>
+ style sheet data
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+
+ <xs:simpleType name="Text">
+ <xs:annotation>
+ <xs:documentation>
+ used for titles etc.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+
+ <xs:simpleType name="FrameTarget">
+ <xs:annotation>
+ <xs:documentation>
+ render in this frame
+ </xs:documentation>
+ </xs:annotation>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:pattern value="_(blank|self|parent|top)|[A-Za-z]\c*" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+
+ <xs:simpleType name="Length">
+ <xs:annotation>
+ <xs:documentation>
+ nn for pixels or nn% for percentage length
+ </xs:documentation>
+ </xs:annotation>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[-+]?(\d+|\d+(\.\d+)?%)" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+
+ <xs:simpleType name="MultiLength">
+ <xs:annotation>
+ <xs:documentation>
+ pixel, percentage, or relative
+ </xs:documentation>
+ </xs:annotation>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[-+]?(\d+|\d+(\.\d+)?%)|[1-9]?(\d+)?\*" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+
+ <xs:simpleType name="Pixels">
+ <xs:annotation>
+ <xs:documentation>
+ integer representing length in pixels
+ </xs:documentation>
+ </xs:annotation>
+ <xs:union memberTypes="xs:nonNegativeInteger cdk:elMixedExpression" />
+ </xs:simpleType>
+
+ <xs:annotation>
+ <xs:documentation>
+ these are used for image maps
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:simpleType name="Shape">
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="rect" />
+ <xs:enumeration value="circle" />
+ <xs:enumeration value="poly" />
+ <xs:enumeration value="default" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+
+ <xs:simpleType name="Coords">
+ <xs:annotation>
+ <xs:documentation>
+ comma separated list of lengths
+ </xs:documentation>
+ </xs:annotation>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[-+]?(\d+|\d+(\.\d+)?%)(,\s*[-+]?(\d+|\d+(\.\d+)?%))*" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+
+ <xs:simpleType name="ImgAlign">
+ <xs:annotation>
+ <xs:documentation>
+ used for object, applet, img, input and iframe
+ </xs:documentation>
+ </xs:annotation>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="top" />
+ <xs:enumeration value="middle" />
+ <xs:enumeration value="bottom" />
+ <xs:enumeration value="left" />
+ <xs:enumeration value="right" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+
+ <xs:simpleType name="Color">
+ <xs:annotation>
+ <xs:documentation>
+ a color using sRGB: #RRGGBB as Hex values
+
+ There are
+ also 16 widely known color names with their sRGB values:
+
+ Black =
+ #000000 Green = #008000
+ Silver = #C0C0C0 Lime = #00FF00
+ Gray = #808080
+ Olive = #808000
+ White = #FFFFFF Yellow = #FFFF00
+ Maroon = #800000 Navy
+ = #000080
+ Red = #FF0000 Blue = #0000FF
+ Purple = #800080 Teal = #008080
+ Fuchsia= #FF00FF Aqua = #00FFFF
+ </xs:documentation>
+ </xs:annotation>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[A-Za-z]+|#[0-9A-Fa-f]{3}|#[0-9A-Fa-f]{6}" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+
+ <!-- TODO: add constraints -->
+ <xs:simpleType name="ID">
+ <xs:union memberTypes="xs:ID cdk:elMixedExpression" />
+ </xs:simpleType>
+ <xs:simpleType name="IDREF">
+ <xs:union memberTypes="xs:IDREF cdk:elMixedExpression" />
+ </xs:simpleType>
+ <xs:simpleType name="IDREFS">
+ <xs:union memberTypes="xs:IDREFS cdk:elMixedExpression" />
+ </xs:simpleType>
+ <xs:simpleType name="NMTOKEN">
+ <xs:union memberTypes="xs:NMTOKEN cdk:elMixedExpression" />
+ </xs:simpleType>
+ <xs:simpleType name="NMTOKENS">
+ <xs:union memberTypes="xs:NMTOKENS cdk:elMixedExpression" />
+ </xs:simpleType>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Generic Attributes
+ ===============================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:attributeGroup name="coreattrs">
+ <xs:annotation>
+ <xs:documentation>
+ core attributes common to most elements
+ id
+ document-wide unique id
+ class space separated list of classes
+ style
+ associated style info
+ title advisory title/amplification
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="id" type="ID" />
+ <xs:attribute name="class" type="NMTOKENS" />
+ <xs:attribute name="style" type="StyleSheet" />
+ <xs:attribute name="title" type="Text" />
+ </xs:attributeGroup>
+
+ <xs:simpleType name="simpleType.dir">
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="ltr" />
+ <xs:enumeration value="rtl" />
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:attributeGroup name="i18n">
+ <xs:annotation>
+ <xs:documentation>
+ internationalization attributes
+ lang language code
+ (backwards compatible)
+ xml:lang language code (as per XML 1.0 spec)
+ dir direction for weak/neutral text
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="lang" type="LanguageCode" />
+
+ <!-- TODO: xml:lang can be made EL -->
+ <xs:attribute ref="xml:lang" />
+ <xs:attribute name="dir">
+ <xs:simpleType>
+ <xs:union memberTypes="simpleType.dir cdk:elMixedExpression" />
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="events">
+ <xs:annotation>
+ <xs:documentation>
+ attributes for common UI events
+ onclick a pointer
+ button was clicked
+ ondblclick a pointer button was double clicked
+ onmousedown a pointer button was pressed down
+ onmouseup a pointer
+ button was released
+ onmousemove a pointer was moved onto the element
+ onmouseout a pointer was moved away from the element
+ onkeypress a key
+ was pressed and released
+ onkeydown a key was pressed down
+ onkeyup a
+ key was released
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="onclick" type="Script" />
+ <xs:attribute name="ondblclick" type="Script" />
+ <xs:attribute name="onmousedown" type="Script" />
+ <xs:attribute name="onmouseup" type="Script" />
+ <xs:attribute name="onmouseover" type="Script" />
+ <xs:attribute name="onmousemove" type="Script" />
+ <xs:attribute name="onmouseout" type="Script" />
+ <xs:attribute name="onkeypress" type="Script" />
+ <xs:attribute name="onkeydown" type="Script" />
+ <xs:attribute name="onkeyup" type="Script" />
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="focus">
+ <xs:annotation>
+ <xs:documentation>
+ attributes for elements that can get the focus
+ accesskey accessibility key character
+ tabindex position in tabbing
+ order
+ onfocus the element got the focus
+ onblur the element lost the
+ focus
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="accesskey" type="Character" />
+ <xs:attribute name="tabindex" type="tabindexNumber" />
+ <xs:attribute name="onfocus" type="Script" />
+ <xs:attribute name="onblur" type="Script" />
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="attrs">
+ <xs:attributeGroup ref="coreattrs" />
+ <xs:attributeGroup ref="i18n" />
+ <xs:attributeGroup ref="events" />
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="TextAlign">
+ <xs:annotation>
+ <xs:documentation>
+ text alignment for p, div, h1-h6. The default is
+ align="left" for ltr headings, "right" for rtl
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="align">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="left" />
+ <xs:enumeration value="center" />
+ <xs:enumeration value="right" />
+ <xs:enumeration value="justify" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:attributeGroup>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Text Elements
+ ====================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:group name="special.extra">
+ <xs:choice>
+ <xs:element ref="object" />
+ <xs:element ref="applet" />
+ <xs:element ref="img" />
+ <xs:element ref="map" />
+ <xs:element ref="iframe" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="special.basic">
+ <xs:choice>
+ <xs:element ref="br" />
+ <xs:element ref="span" />
+ <xs:element ref="bdo" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="special">
+ <xs:choice>
+ <xs:group ref="special.basic" />
+ <xs:group ref="special.extra" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="fontstyle.extra">
+ <xs:choice>
+ <xs:element ref="big" />
+ <xs:element ref="small" />
+ <xs:element ref="font" />
+ <xs:element ref="basefont" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="fontstyle.basic">
+ <xs:choice>
+ <xs:element ref="tt" />
+ <xs:element ref="i" />
+ <xs:element ref="b" />
+ <xs:element ref="u" />
+ <xs:element ref="s" />
+ <xs:element ref="strike" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="fontstyle">
+ <xs:choice>
+ <xs:group ref="fontstyle.basic" />
+ <xs:group ref="fontstyle.extra" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="phrase.extra">
+ <xs:choice>
+ <xs:element ref="sub" />
+ <xs:element ref="sup" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="phrase.basic">
+ <xs:choice>
+ <xs:element ref="em" />
+ <xs:element ref="strong" />
+ <xs:element ref="dfn" />
+ <xs:element ref="code" />
+ <xs:element ref="q" />
+ <xs:element ref="samp" />
+ <xs:element ref="kbd" />
+ <xs:element ref="var" />
+ <xs:element ref="cite" />
+ <xs:element ref="abbr" />
+ <xs:element ref="acronym" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="phrase">
+ <xs:choice>
+ <xs:group ref="phrase.basic" />
+ <xs:group ref="phrase.extra" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="inline.forms">
+ <xs:choice>
+ <xs:element ref="input" />
+ <xs:element ref="select" />
+ <xs:element ref="textarea" />
+ <xs:element ref="label" />
+ <xs:element ref="button" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="misc.inline">
+ <xs:annotation>
+ <xs:documentation>
+ these can only occur at block level
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice>
+ <xs:group ref="cdk:structural" />
+ <xs:element ref="ins" />
+ <xs:element ref="del" />
+ <xs:element ref="script" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="misc">
+ <xs:annotation>
+ <xs:documentation>
+ these can only occur at block level
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice>
+ <xs:group ref="misc.elements" />
+ <xs:group ref="misc.inline" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="misc.elements">
+ <xs:choice>
+ <xs:element ref="noscript" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="inline">
+ <xs:choice>
+ <xs:group ref="inline.elements" />
+ <xs:group ref="special" />
+ <xs:group ref="fontstyle" />
+ <xs:group ref="phrase" />
+ <xs:group ref="inline.forms" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="inline.elements">
+ <xs:choice>
+ <xs:element ref="a" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="Inline" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ "Inline" covers inline or "text-level" element
+ </xs:documentation>
+ </xs:annotation>
+ <xs:group ref="Inline.content" />
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="Inline.content">
+ <xs:choice>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="inline" />
+ <xs:group ref="misc.inline" />
+ </xs:choice>
+ </xs:choice>
+ </xs:group>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================== Block level elements
+ ==============================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:group name="heading">
+ <xs:choice>
+ <xs:element ref="h1" />
+ <xs:element ref="h2" />
+ <xs:element ref="h3" />
+ <xs:element ref="h4" />
+ <xs:element ref="h5" />
+ <xs:element ref="h6" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="lists">
+ <xs:choice>
+ <xs:element ref="ul" />
+ <xs:element ref="ol" />
+ <xs:element ref="dl" />
+ <xs:element ref="menu" />
+ <xs:element ref="dir" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="blocktext">
+ <xs:choice>
+ <xs:element ref="pre" />
+ <xs:element ref="hr" />
+ <xs:element ref="blockquote" />
+ <xs:element ref="address" />
+ <xs:element ref="center" />
+ <xs:element ref="noframes" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="block">
+ <xs:choice>
+ <xs:group ref="block.children" />
+ <xs:group ref="heading" />
+ <xs:group ref="lists" />
+ <xs:group ref="blocktext" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="block.children">
+ <xs:choice>
+ <xs:element ref="p" />
+ <xs:element ref="div" />
+ <xs:element ref="isindex" />
+ <xs:element ref="fieldset" />
+ <xs:element ref="table" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="Flow" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ "Flow" mixes block and inline and is used for list
+ items etc.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:group ref="Flow.children" />
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="Flow.children">
+ <xs:choice>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="block" />
+ <xs:group ref="form.element.group" />
+ <xs:group ref="inline" />
+ <xs:group ref="misc" />
+ </xs:choice>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="form.element.group">
+ <xs:choice>
+ <xs:element ref="form" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================== Content models for exclusions
+ =====================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:complexType name="a.content" mixed="true">
+ <xs:group ref="a.children" minOccurs="0" maxOccurs="unbounded" />
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attributeGroup ref="focus"></xs:attributeGroup>
+ <xs:attribute name="charset" type="Charset"></xs:attribute>
+ <xs:attribute name="type" type="ContentType"></xs:attribute>
+ <xs:attribute name="name" type="NMTOKEN"></xs:attribute>
+ <xs:attribute name="href" type="URI"></xs:attribute>
+ <xs:attribute name="hreflang" type="LanguageCode"></xs:attribute>
+ <xs:attribute name="rel" type="LinkTypes"></xs:attribute>
+ <xs:attribute name="rev" type="LinkTypes"></xs:attribute>
+ <xs:attribute default="rect" name="shape" type="Shape"></xs:attribute>
+ <xs:attribute name="coords" type="Coords"></xs:attribute>
+ <xs:attribute name="target" type="FrameTarget"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="a.children">
+ <xs:choice>
+ <xs:group ref="special"></xs:group>
+ <xs:group ref="fontstyle"></xs:group>
+ <xs:group ref="phrase"></xs:group>
+ <xs:group ref="inline.forms"></xs:group>
+ <xs:group ref="misc.inline"></xs:group>
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="pre.content" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ pre uses "Inline" excluding img, object, applet,
+ big, small,
+ font, or basefont
+ </xs:documentation>
+ </xs:annotation>
+ <xs:group ref="pre.children" />
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="pre.children">
+ <xs:choice>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="a.element.group" />
+ <xs:group ref="special.basic" />
+ <xs:group ref="fontstyle.basic" />
+ <xs:group ref="phrase.basic" />
+ <xs:group ref="inline.forms" />
+ <xs:group ref="misc.inline" />
+ </xs:choice>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="a.element.group">
+ <xs:choice>
+ <xs:element ref="a" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="form.content" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ form uses "Flow" excluding form
+ </xs:documentation>
+ </xs:annotation>
+ <xs:group ref="form.children" />
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="form.children">
+ <xs:choice>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="block" />
+ <xs:group ref="inline" />
+ <xs:group ref="misc" />
+ </xs:choice>
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="button.content" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ button uses "Flow" but excludes a, form, form
+ controls, iframe
+ </xs:documentation>
+ </xs:annotation>
+ <xs:group ref="button.children" />
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="button.children">
+ <xs:choice>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="button.children.elements" />
+ <xs:group ref="heading" />
+ <xs:group ref="lists" />
+ <xs:group ref="blocktext" />
+ <xs:group ref="fontstyle" />
+ <xs:group ref="phrase" />
+ <xs:group ref="misc" />
+ </xs:choice>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="button.children.elements">
+ <xs:choice>
+ <xs:element ref="p" />
+ <xs:element ref="div" />
+ <xs:element ref="table" />
+ <xs:element ref="br" />
+ <xs:element ref="span" />
+ <xs:element ref="bdo" />
+ <xs:element ref="object" />
+ <xs:element ref="applet" />
+ <xs:element ref="img" />
+ <xs:element ref="map" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================ Document Structure
+ ==================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="html" type="html.content">
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================ Document Head
+ =======================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:group name="head.misc">
+ <xs:sequence>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="cdk:structural" minOccurs="0" maxOccurs="unbounded" />
+ <xs:element ref="script" />
+ <xs:element ref="style" />
+ <xs:element ref="meta" />
+ <xs:element ref="link" />
+ <xs:element ref="object" />
+ <xs:element ref="isindex" />
+ </xs:choice>
+ </xs:sequence>
+ </xs:group>
+
+ <xs:element name="head" type="head.content">
+ <xs:annotation>
+ <xs:documentation>
+ content model is "head.misc" combined with a single
+ title and an optional base element in any order
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="title" type="title.content">
+ <xs:annotation>
+ <xs:documentation>
+ The title element is not considered part of the
+ flow of text.
+ It should be displayed, for example as the page header
+ or
+ window title. Exactly one title is required per document.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="base" type="base.content">
+ <xs:annotation>
+ <xs:documentation>
+ document base URI
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="meta" type="meta.content">
+ <xs:annotation>
+ <xs:documentation>
+ generic metainformation
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="link" type="link.content">
+ <xs:annotation>
+ <xs:documentation>
+ Relationship values can be used in principle:
+
+ a) for
+ document specific toolbars/menus when used
+ with the link element in
+ document head e.g.
+ start, contents, previous, next, index, end, help
+ b) to link to a separate style sheet (rel="stylesheet")
+ c) to make a
+ link to a script (rel="script")
+ d) by stylesheets to control how
+ collections of
+ html nodes are rendered into printed documents
+ e) to
+ make a link to a printable version of this document
+ e.g. a PostScript
+ or PDF version (rel="alternate" media="print")
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="style" type="style.content">
+ <xs:annotation>
+ <xs:documentation>
+ style info, which may include CDATA sections
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="script" type="script.content">
+ <xs:annotation>
+ <xs:documentation>
+ script statements, which may include CDATA sections
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="noscript">
+ <xs:annotation>
+ <xs:documentation>
+ alternate content container for non script-based
+ rendering
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ======================= Frames
+ =======================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="iframe">
+ <xs:annotation>
+ <xs:documentation>
+ inline subwindow
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="coreattrs" />
+ <xs:attribute name="longdesc" type="URI" />
+ <xs:attribute name="name" type="NMTOKEN" />
+ <xs:attribute name="src" type="URI" />
+ <xs:attribute name="frameborder" default="1">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="1" />
+ <xs:enumeration value="0" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="marginwidth" type="Pixels" />
+ <xs:attribute name="marginheight" type="Pixels" />
+ <xs:attribute name="scrolling" default="auto">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="yes" />
+ <xs:enumeration value="no" />
+ <xs:enumeration value="auto" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="align" type="ImgAlign" />
+ <xs:attribute name="height" type="Length" />
+ <xs:attribute name="width" type="Length" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="noframes">
+ <xs:annotation>
+ <xs:documentation>
+ alternate content container for non frame-based
+ rendering
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Document Body
+ ====================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="body">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attribute name="onload" type="Script" />
+ <xs:attribute name="onunload" type="Script" />
+ <xs:attribute name="background" type="URI" />
+ <xs:attribute name="bgcolor" type="Color" />
+ <xs:attribute name="text" type="Color" />
+ <xs:attribute name="link" type="Color" />
+ <xs:attribute name="vlink" type="Color" />
+ <xs:attribute name="alink" type="Color" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="div">
+ <xs:annotation>
+ <xs:documentation>
+ generic language/style container
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attributeGroup ref="TextAlign" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Paragraphs
+ =======================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="p">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attributeGroup ref="TextAlign" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Headings
+ =========================================
+
+ There are six levels of
+ headings from h1 (the most important)
+ to h6 (the least important).
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="h1">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attributeGroup ref="TextAlign" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="h2">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attributeGroup ref="TextAlign" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="h3">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attributeGroup ref="TextAlign" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="h4">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attributeGroup ref="TextAlign" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="h5">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attributeGroup ref="TextAlign" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="h6">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attributeGroup ref="TextAlign" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Lists
+ ============================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:simpleType name="ULStyle">
+ <xs:annotation>
+ <xs:documentation>
+ Unordered list bullet styles
+ </xs:documentation>
+ </xs:annotation>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="disc" />
+ <xs:enumeration value="square" />
+ <xs:enumeration value="circle" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+
+ <xs:attribute name="compact">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="compact" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+
+ <xs:element name="ul" type="ul.content">
+ <xs:annotation>
+ <xs:documentation>
+ Unordered list
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:simpleType name="OLStyle">
+ <xs:annotation>
+ <xs:documentation>
+ Ordered list numbering style
+
+ 1 arabic numbers 1, 2,
+ 3, ...
+ a lower alpha a, b, c, ...
+ A upper alpha A, B, C, ...
+ i lower
+ roman i, ii, iii, ...
+ I upper roman I, II, III, ...
+
+ The style is
+ applied to the sequence number which by default
+ is reset to 1 for the
+ first list item in an ordered list.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+
+ <xs:element name="ol" type="ol.content">
+ <xs:annotation>
+ <xs:documentation>
+ Ordered (numbered) list
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="menu" type="menu.content">
+ <xs:annotation>
+ <xs:documentation>
+ single column list (DEPRECATED)
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="dir" type="dir.content">
+ <xs:annotation>
+ <xs:documentation>
+ multiple column list (DEPRECATED)
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:simpleType name="LIStyle">
+ <xs:annotation>
+ <xs:documentation>
+ LIStyle is constrained to: "(ULStyle|OLStyle)"
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+
+ <xs:element name="li">
+ <xs:annotation>
+ <xs:documentation>
+ list item
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attribute name="type" type="LIStyle" />
+ <xs:attribute name="value" type="Number" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ definition lists - dt for term, dd for its
+ definition
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="dl" type="dl.content" />
+
+ <xs:element name="dt">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="dd">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Address
+ ==========================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="address" type="address.content">
+ <xs:annotation>
+ <xs:documentation>
+ information on author
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Horizontal Rule
+ ==================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="hr" type="hr.content">
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Preformatted Text
+ ================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="pre">
+ <xs:annotation>
+ <xs:documentation>
+ content is "Inline" excluding
+ "img|object|applet|big|small|sub|sup|font|basefont"
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="pre.content">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attribute name="width" type="Number" />
+ <xs:attribute ref="xml:space" fixed="preserve" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Block-like Quotes
+ ================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="blockquote">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attribute name="cite" type="URI" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Text alignment
+ ===================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="center">
+ <xs:annotation>
+ <xs:documentation>
+ center content
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Inserted/Deleted Text
+ ============================
+
+ ins/del are allowed in block and inline
+ content, but its
+ inappropriate to include block content within an ins
+ element
+ occurring in inline content.
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="ins">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attribute name="cite" type="URI" />
+ <xs:attribute name="datetime" type="Datetime" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="del">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attribute name="cite" type="URI" />
+ <xs:attribute name="datetime" type="Datetime" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================== The Anchor Element
+ ================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="a" type="a.content">
+ <xs:annotation>
+ <xs:documentation>
+ content is "Inline" except that anchors shouldn't
+ be nested
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ===================== Inline Elements
+ ================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="span">
+ <xs:annotation>
+ <xs:documentation>
+ generic language/style container
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="bdo">
+ <xs:annotation>
+ <xs:documentation>
+ I18N BiDi over-ride
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="coreattrs" />
+ <xs:attributeGroup ref="events" />
+ <xs:attribute name="lang" type="LanguageCode" />
+ <xs:attribute ref="xml:lang" />
+ <xs:attribute name="dir" use="required">
+ <xs:simpleType>
+ <xs:union memberTypes="simpleType.dir cdk:elMixedExpression" />
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="br" type="br.content">
+ <xs:annotation>
+ <xs:documentation>
+ forced line break
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="em">
+ <xs:annotation>
+ <xs:documentation>
+ emphasis
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="strong">
+ <xs:annotation>
+ <xs:documentation>
+ strong emphasis
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="dfn">
+ <xs:annotation>
+ <xs:documentation>
+ definitional
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="code">
+ <xs:annotation>
+ <xs:documentation>
+ program code
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="samp">
+ <xs:annotation>
+ <xs:documentation>
+ sample
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="kbd">
+ <xs:annotation>
+ <xs:documentation>
+ something user would type
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="var">
+ <xs:annotation>
+ <xs:documentation>
+ variable
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="cite">
+ <xs:annotation>
+ <xs:documentation>
+ citation
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="abbr">
+ <xs:annotation>
+ <xs:documentation>
+ abbreviation
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="acronym">
+ <xs:annotation>
+ <xs:documentation>
+ acronym
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="q">
+ <xs:annotation>
+ <xs:documentation>
+ inlined quote
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attribute name="cite" type="URI" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="sub">
+ <xs:annotation>
+ <xs:documentation>
+ subscript
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="sup">
+ <xs:annotation>
+ <xs:documentation>
+ superscript
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="tt">
+ <xs:annotation>
+ <xs:documentation>
+ fixed pitch font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="i">
+ <xs:annotation>
+ <xs:documentation>
+ italic font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="b">
+ <xs:annotation>
+ <xs:documentation>
+ bold font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="big">
+ <xs:annotation>
+ <xs:documentation>
+ bigger font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="small">
+ <xs:annotation>
+ <xs:documentation>
+ smaller font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="u">
+ <xs:annotation>
+ <xs:documentation>
+ underline
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="s">
+ <xs:annotation>
+ <xs:documentation>
+ strike-through
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="strike">
+ <xs:annotation>
+ <xs:documentation>
+ strike-through
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="basefont" type="basefont.content">
+ <xs:annotation>
+ <xs:documentation>
+ base font size
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="font">
+ <xs:annotation>
+ <xs:documentation>
+ local change to font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="coreattrs" />
+ <xs:attributeGroup ref="i18n" />
+ <xs:attribute name="size" />
+ <xs:attribute name="color" type="Color" />
+ <xs:attribute name="face" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ==================== Object
+ ======================================
+
+ object is used to embed objects
+ as part of HTML pages.
+ param elements should precede other content.
+ Parameters
+ can also be expressed as attribute/value pairs on the
+ object element itself when brevity is desired.
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="object" type="object.content" />
+
+ <xs:element name="param" type="param.content">
+ <xs:annotation>
+ <xs:documentation>
+ param is used to supply a named property value.
+ In
+ XML it would seem natural to follow RDF and support an
+ abbreviated
+ syntax where the param elements are replaced
+ by attribute value pairs
+ on the object start tag.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Java applet
+ ==================================
+
+ One of code or object attributes
+ must be present.
+ Place param elements before other content.
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="applet" type="applet.content">
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Images
+ ===========================================
+
+ To avoid accessibility
+ problems for people who aren't
+ able to see the image, you should
+ provide a text
+ description using the alt and longdesc attributes.
+ In
+ addition, avoid the use of server-side image maps.
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="img" type="img.content">
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================== Client-side image maps
+ ============================
+
+ These can be placed in the same document
+ or grouped in a
+ separate document although this isn't yet widely
+ supported
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="map" type="map.content">
+ </xs:element>
+
+ <xs:element name="area" type="area.content">
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================ Forms
+ ===============================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="form">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="form.content">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attribute name="action" use="required" type="URI" />
+ <xs:attribute name="method" default="get">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="get" />
+ <xs:enumeration value="post" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="enctype" type="ContentType"
+ default="application/x-www-form-urlencoded" />
+ <xs:attribute name="onsubmit" type="Script" />
+ <xs:attribute name="onreset" type="Script" />
+ <xs:attribute name="accept" type="ContentTypes" />
+ <xs:attribute name="accept-charset" type="Charsets" />
+ <xs:attribute name="target" type="FrameTarget" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="label">
+ <xs:annotation>
+ <xs:documentation>
+ Each label must not contain more than ONE field
+ Label elements shouldn't be nested.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attribute name="for" type="IDREF" />
+ <xs:attribute name="accesskey" type="Character" />
+ <xs:attribute name="onfocus" type="Script" />
+ <xs:attribute name="onblur" type="Script" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:simpleType name="InputType">
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="text" />
+ <xs:enumeration value="password" />
+ <xs:enumeration value="checkbox" />
+ <xs:enumeration value="radio" />
+ <xs:enumeration value="submit" />
+ <xs:enumeration value="reset" />
+ <xs:enumeration value="file" />
+ <xs:enumeration value="hidden" />
+ <xs:enumeration value="image" />
+ <xs:enumeration value="button" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+
+ <xs:attribute name="checked">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="checked" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="disabled">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="disabled" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="readonly">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="readonly" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+
+ <xs:element name="input" type="input.content">
+ <xs:annotation>
+ <xs:documentation>
+ form control
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="select" type="select.content">
+ <xs:annotation>
+ <xs:documentation>
+ option selector
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="optgroup" type="optgroup.content">
+ <xs:annotation>
+ <xs:documentation>
+ option group
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="option" type="option.content">
+ <xs:annotation>
+ <xs:documentation>
+ selectable choice
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="textarea" type="textarea.content">
+ <xs:annotation>
+ <xs:documentation>
+ multi-line text field
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="fieldset" type="fieldset.content">
+ <xs:annotation>
+ <xs:documentation>
+ The fieldset element is used to group form fields.
+ Only one legend element should occur in the content
+ and if present
+ should only be preceded by whitespace.
+
+ NOTE: this content model is
+ different from the XHTML 1.0 DTD,
+ closer to the intended content
+ model in HTML4 DTD
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:simpleType name="LAlign">
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="top" />
+ <xs:enumeration value="bottom" />
+ <xs:enumeration value="left" />
+ <xs:enumeration value="right" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+
+ <xs:element name="legend">
+ <xs:annotation>
+ <xs:documentation>
+ fieldset label
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attribute name="accesskey" type="Character" />
+ <xs:attribute name="align" type="LAlign" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="button">
+ <xs:annotation>
+ <xs:documentation>
+ Content is "Flow" excluding a, form and form
+ controls
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="button.content">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attributeGroup ref="focus" />
+ <xs:attribute name="name" />
+ <xs:attribute name="value" />
+ <xs:attribute name="type" default="submit">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="button" />
+ <xs:enumeration value="submit" />
+ <xs:enumeration value="reset" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute ref="disabled" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="isindex" type="isindex.content">
+ <xs:annotation>
+ <xs:documentation>
+ single-line text input control (DEPRECATED)
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ======================= Tables
+ =======================================
+
+ Derived from IETF HTML table
+ standard, see [RFC1942]
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:simpleType name="TFrame">
+ <xs:annotation>
+ <xs:documentation>
+ The border attribute sets the thickness of the
+ frame around the
+ table. The default units are screen pixels.
+
+ The frame
+ attribute specifies which parts of the frame around
+ the table should
+ be rendered. The values are not the same as
+ CALS to avoid a name
+ clash with the valign attribute.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="void" />
+ <xs:enumeration value="above" />
+ <xs:enumeration value="below" />
+ <xs:enumeration value="hsides" />
+ <xs:enumeration value="lhs" />
+ <xs:enumeration value="rhs" />
+ <xs:enumeration value="vsides" />
+ <xs:enumeration value="box" />
+ <xs:enumeration value="border" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+
+ <xs:simpleType name="TRules">
+ <xs:annotation>
+ <xs:documentation>
+ The rules attribute defines which rules to draw
+ between cells:
+
+ If rules is absent then assume:
+ "none" if border is
+ absent or border="0" otherwise "all"
+ </xs:documentation>
+ </xs:annotation>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="none" />
+ <xs:enumeration value="groups" />
+ <xs:enumeration value="rows" />
+ <xs:enumeration value="cols" />
+ <xs:enumeration value="all" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+
+ <xs:simpleType name="TAlign">
+ <xs:annotation>
+ <xs:documentation>
+ horizontal placement of table relative to document
+ </xs:documentation>
+ </xs:annotation>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="left" />
+ <xs:enumeration value="center" />
+ <xs:enumeration value="right" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+
+ <xs:attributeGroup name="cellhalign">
+ <xs:annotation>
+ <xs:documentation>
+ horizontal alignment attributes for cell contents
+
+ char alignment char, e.g. char=':'
+ charoff offset for alignment char
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="align">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="left" />
+ <xs:enumeration value="center" />
+ <xs:enumeration value="right" />
+ <xs:enumeration value="justify" />
+ <xs:enumeration value="char" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="char" type="Character" />
+ <xs:attribute name="charoff" type="Length" />
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="cellvalign">
+ <xs:annotation>
+ <xs:documentation>
+ vertical alignment attributes for cell contents
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="valign">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="top" />
+ <xs:enumeration value="middle" />
+ <xs:enumeration value="bottom" />
+ <xs:enumeration value="baseline" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:attributeGroup>
+
+ <xs:element name="table" type="table.content">
+ </xs:element>
+
+ <xs:simpleType name="CAlign">
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="top" />
+ <xs:enumeration value="bottom" />
+ <xs:enumeration value="left" />
+ <xs:enumeration value="right" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elFreeformExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+
+ <xs:element name="caption">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attribute name="align" type="CAlign" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ Use thead to duplicate headers when breaking table
+ across page boundaries, or for static headers when
+ tbody sections are
+ rendered in scrolling panel.
+
+ Use tfoot to duplicate footers when
+ breaking table
+ across page boundaries, or for static footers when
+ tbody sections are rendered in scrolling panel.
+
+ Use multiple tbody
+ sections when rules are needed
+ between groups of table rows.
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="thead" type="thead.content">
+ </xs:element>
+
+ <xs:element name="tfoot" type="tfoot.content">
+ </xs:element>
+
+ <xs:element name="tbody" type="tbody.content">
+ </xs:element>
+
+ <xs:element name="colgroup" type="colgroup.content">
+ <xs:annotation>
+ <xs:documentation>
+ colgroup groups a set of col elements. It allows
+ you to group
+ several semantically related columns together.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="col" type="col.content">
+ <xs:annotation>
+ <xs:documentation>
+ col elements define the alignment properties for
+ cells in
+ one or more columns.
+
+ The width attribute specifies the width
+ of the columns, e.g.
+
+ width=64 width in screen pixels
+ width=0.5*
+ relative width of 0.5
+
+ The span attribute causes the attributes of one
+ col element to apply to more than one column.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="tr" type="tr.content">
+ </xs:element>
+
+ <xs:simpleType name="Scope">
+ <xs:annotation>
+ <xs:documentation>
+ Scope is simpler than headers attribute for common
+ tables
+ </xs:documentation>
+ </xs:annotation>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="row" />
+ <xs:enumeration value="col" />
+ <xs:enumeration value="rowgroup" />
+ <xs:enumeration value="colgroup" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elMixedExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+
+ <xs:annotation>
+ <xs:documentation>
+ th is for headers, td for data and for cells acting
+ as both
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:attribute name="nowrap">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="nowrap" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elMixedExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+
+ <xs:element name="th">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attribute name="abbr" type="Text" />
+ <xs:attribute name="axis" />
+ <xs:attribute name="headers" type="IDREFS" />
+ <xs:attribute name="scope" type="Scope" />
+ <xs:attribute name="rowspan" default="1" type="Number" />
+ <xs:attribute name="colspan" default="1" type="Number" />
+ <xs:attributeGroup ref="cellhalign" />
+ <xs:attributeGroup ref="cellvalign" />
+ <xs:attribute ref="nowrap" />
+ <xs:attribute name="bgcolor" type="Color" />
+ <xs:attribute name="width" type="Length" />
+ <xs:attribute name="height" type="Length" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="td">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attribute name="abbr" type="Text" />
+ <xs:attribute name="axis" />
+ <xs:attribute name="headers" type="IDREFS" />
+ <xs:attribute name="scope" type="Scope" />
+ <xs:attribute name="rowspan" default="1" type="Number" />
+ <xs:attribute name="colspan" default="1" type="Number" />
+ <xs:attributeGroup ref="cellhalign" />
+ <xs:attributeGroup ref="cellvalign" />
+ <xs:attribute ref="nowrap" />
+ <xs:attribute name="bgcolor" type="Color" />
+ <xs:attribute name="width" type="Length" />
+ <xs:attribute name="height" type="Length" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:complexType name="address.content" mixed="true">
+ <xs:group ref="address.children" />
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="address.children">
+ <xs:choice>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="inline"></xs:group>
+ <xs:group ref="misc.inline"></xs:group>
+ <xs:group ref="address.children.elements" />
+ </xs:choice>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="address.children.elements">
+ <xs:choice>
+ <xs:element ref="p" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="applet.content" mixed="true">
+ <xs:group ref="applet.children" />
+ <xs:attributeGroup ref="coreattrs"></xs:attributeGroup>
+ <xs:attribute name="codebase" type="URI"></xs:attribute>
+ <xs:attribute name="archive" type="xs:anySimpleType"></xs:attribute>
+ <xs:attribute name="code" type="xs:anySimpleType"></xs:attribute>
+ <xs:attribute name="object" type="xs:anySimpleType"></xs:attribute>
+ <xs:attribute name="alt" type="Text"></xs:attribute>
+ <xs:attribute name="name" type="NMTOKEN"></xs:attribute>
+ <xs:attribute use="required" name="width" type="Length"></xs:attribute>
+ <xs:attribute use="required" name="height" type="Length"></xs:attribute>
+ <xs:attribute name="align" type="ImgAlign"></xs:attribute>
+ <xs:attribute name="hspace" type="Pixels"></xs:attribute>
+ <xs:attribute name="vspace" type="Pixels"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="applet.children">
+ <xs:choice>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="param.element.group" />
+ <xs:group ref="block"></xs:group>
+ <xs:group ref="form.element.group" />
+ <xs:group ref="inline"></xs:group>
+ <xs:group ref="misc"></xs:group>
+ </xs:choice>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="param.element.group">
+ <xs:choice>
+ <xs:element ref="param"></xs:element>
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="area.content">
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attributeGroup ref="focus"></xs:attributeGroup>
+ <xs:attribute default="rect" name="shape" type="Shape"></xs:attribute>
+ <xs:attribute name="coords" type="Coords"></xs:attribute>
+ <xs:attribute name="href" type="URI"></xs:attribute>
+ <xs:attribute name="nohref">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="nohref"></xs:enumeration>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elMixedExpression"></xs:restriction>
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute use="required" name="alt" type="Text"></xs:attribute>
+ <xs:attribute name="target" type="FrameTarget"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:complexType name="base.content">
+ <xs:attribute name="id" type="ID"></xs:attribute>
+ <xs:attribute name="href" type="URI"></xs:attribute>
+ <xs:attribute name="target" type="FrameTarget"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:complexType name="basefont.content">
+ <xs:attribute name="id" type="ID" />
+ <xs:attribute use="required" name="size" type="xs:anySimpleType" />
+ <xs:attribute name="color" type="Color" />
+ <xs:attribute name="face" type="xs:anySimpleType" />
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:complexType name="br.content">
+ <xs:attributeGroup ref="coreattrs"></xs:attributeGroup>
+ <xs:attribute default="none" name="clear">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="left"></xs:enumeration>
+ <xs:enumeration value="all"></xs:enumeration>
+ <xs:enumeration value="right"></xs:enumeration>
+ <xs:enumeration value="none"></xs:enumeration>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elMixedExpression"></xs:restriction>
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:complexType name="col.content">
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attribute default="1" name="span" type="Number"></xs:attribute>
+ <xs:attribute name="width" type="MultiLength"></xs:attribute>
+ <xs:attributeGroup ref="cellhalign"></xs:attributeGroup>
+ <xs:attributeGroup ref="cellvalign"></xs:attributeGroup>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:complexType name="colgroup.content">
+ <xs:group ref="colgroup.children" />
+ <xs:attributeGroup ref="attrs" />
+ <xs:attribute default="1" name="span" type="Number" />
+ <xs:attribute name="width" type="MultiLength" />
+ <xs:attributeGroup ref="cellhalign" />
+ <xs:attributeGroup ref="cellvalign" />
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:group name="colgroup.children">
+ <xs:choice>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element maxOccurs="unbounded" minOccurs="0" ref="col" />
+ <xs:group ref="cdk:structural" />
+ </xs:choice>
+ </xs:choice>
+ </xs:group>
+ <xs:complexType name="dir.content">
+ <xs:group ref="dir.children" />
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attribute ref="compact"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:group name="dir.children">
+ <xs:choice>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element maxOccurs="unbounded" minOccurs="0" ref="li" />
+ <xs:group ref="cdk:structural" />
+ </xs:choice>
+ </xs:choice>
+ </xs:group>
+ <xs:complexType name="dl.content">
+ <xs:group ref="dl.children" />
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attribute ref="compact"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="dl.children">
+ <xs:choice>
+ <xs:choice maxOccurs="unbounded">
+ <xs:element ref="dt" />
+ <xs:element ref="dd" />
+ <xs:group ref="cdk:structural" />
+ </xs:choice>
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="fieldset.content" mixed="true">
+ <xs:group ref="fieldset.children" />
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="fieldset.children">
+ <xs:sequence>
+ <xs:group ref="legend.element.group" />
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="block"></xs:group>
+ <xs:group ref="form.element.group" />
+ <xs:group ref="inline"></xs:group>
+ <xs:group ref="misc"></xs:group>
+ </xs:choice>
+ </xs:sequence>
+ </xs:group>
+
+ <xs:group name="legend.element.group">
+ <xs:choice>
+ <xs:element ref="legend"></xs:element>
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="head.content">
+ <xs:group ref="head.children" />
+ <xs:attributeGroup ref="i18n"></xs:attributeGroup>
+ <xs:attribute name="id" type="ID"></xs:attribute>
+ <xs:attribute name="profile" type="URI"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="head.children">
+ <xs:sequence>
+ <xs:group ref="head.misc" />
+ <xs:choice>
+ <xs:sequence minOccurs="0">
+ <xs:element ref="title" />
+ <xs:group ref="head.misc" />
+ <xs:sequence minOccurs="0">
+ <xs:element ref="base" />
+ <xs:group ref="head.misc" />
+ </xs:sequence>
+ </xs:sequence>
+ <xs:sequence minOccurs="0">
+ <xs:element ref="base" />
+ <xs:group ref="head.misc" />
+ <xs:element ref="title" />
+ <xs:group ref="head.misc" />
+ </xs:sequence>
+ </xs:choice>
+ </xs:sequence>
+ </xs:group>
+
+ <xs:complexType name="hr.content">
+ <xs:attributeGroup ref="attrs" />
+ <xs:attribute name="align">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="left"></xs:enumeration>
+ <xs:enumeration value="center"></xs:enumeration>
+ <xs:enumeration value="right"></xs:enumeration>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elMixedExpression"></xs:restriction>
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="noshade">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="noshade"></xs:enumeration>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elMixedExpression"></xs:restriction>
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="size" type="Pixels"></xs:attribute>
+ <xs:attribute name="width" type="Length"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:complexType name="html.content">
+ <xs:group ref="html.children" />
+ <xs:attributeGroup ref="i18n"></xs:attributeGroup>
+ <xs:attribute name="id" type="ID"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:group name="html.children">
+ <xs:sequence>
+ <xs:element minOccurs="0" ref="head" />
+ <xs:group maxOccurs="unbounded" minOccurs="0" ref="cdk:structural" />
+ <xs:element minOccurs="0" ref="body" />
+ </xs:sequence>
+ </xs:group>
+ <xs:complexType name="img.content">
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attribute use="required" name="src" type="URI"></xs:attribute>
+ <xs:attribute use="required" name="alt" type="Text"></xs:attribute>
+ <xs:attribute name="name" type="NMTOKEN"></xs:attribute>
+ <xs:attribute name="longdesc" type="URI"></xs:attribute>
+ <xs:attribute name="height" type="Length"></xs:attribute>
+ <xs:attribute name="width" type="Length"></xs:attribute>
+ <xs:attribute name="usemap" type="URI">
+ <xs:annotation></xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="ismap">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="ismap"></xs:enumeration>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elMixedExpression"></xs:restriction>
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="align" type="ImgAlign"></xs:attribute>
+ <xs:attribute name="border" type="Length"></xs:attribute>
+ <xs:attribute name="hspace" type="Pixels"></xs:attribute>
+ <xs:attribute name="vspace" type="Pixels"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:complexType name="input.content">
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attributeGroup ref="focus"></xs:attributeGroup>
+ <xs:attribute default="text" name="type" type="InputType"></xs:attribute>
+ <xs:attribute name="name" type="xs:anySimpleType">
+ <xs:annotation></xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="value" type="xs:anySimpleType"></xs:attribute>
+ <xs:attribute ref="checked"></xs:attribute>
+ <xs:attribute ref="disabled"></xs:attribute>
+ <xs:attribute ref="readonly"></xs:attribute>
+ <xs:attribute name="size" type="xs:anySimpleType"></xs:attribute>
+ <xs:attribute name="maxlength" type="Number"></xs:attribute>
+ <xs:attribute name="src" type="URI"></xs:attribute>
+ <xs:attribute name="alt" type="xs:anySimpleType"></xs:attribute>
+ <xs:attribute name="usemap" type="URI"></xs:attribute>
+ <xs:attribute name="onselect" type="Script"></xs:attribute>
+ <xs:attribute name="onchange" type="Script"></xs:attribute>
+ <xs:attribute name="accept" type="ContentTypes"></xs:attribute>
+ <xs:attribute name="align" type="ImgAlign"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:complexType name="isindex.content">
+ <xs:attributeGroup ref="coreattrs"></xs:attributeGroup>
+ <xs:attributeGroup ref="i18n"></xs:attributeGroup>
+ <xs:attribute name="prompt" type="Text"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:complexType name="link.content">
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attribute name="charset" type="Charset"></xs:attribute>
+ <xs:attribute name="href" type="URI"></xs:attribute>
+ <xs:attribute name="hreflang" type="LanguageCode"></xs:attribute>
+ <xs:attribute name="type" type="ContentType"></xs:attribute>
+ <xs:attribute name="rel" type="LinkTypes"></xs:attribute>
+ <xs:attribute name="rev" type="LinkTypes"></xs:attribute>
+ <xs:attribute name="media" type="MediaDesc"></xs:attribute>
+ <xs:attribute name="target" type="FrameTarget"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:complexType name="map.content">
+ <xs:group ref="map.children" />
+ <xs:attributeGroup ref="i18n"></xs:attributeGroup>
+ <xs:attributeGroup ref="events"></xs:attributeGroup>
+ <xs:attribute use="required" name="id" type="ID"></xs:attribute>
+ <xs:attribute name="class" type="xs:anySimpleType"></xs:attribute>
+ <xs:attribute name="style" type="StyleSheet"></xs:attribute>
+ <xs:attribute name="title" type="Text"></xs:attribute>
+ <xs:attribute name="name" type="xs:anySimpleType"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="map.children">
+ <xs:choice>
+ <xs:choice maxOccurs="unbounded">
+ <xs:group ref="block"></xs:group>
+ <xs:group ref="form.element.group" />
+ <xs:group ref="misc"></xs:group>
+ </xs:choice>
+ <xs:group ref="area.element.group" maxOccurs="unbounded" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="area.element.group">
+ <xs:choice>
+ <xs:element ref="area" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="menu.content">
+ <xs:group ref="menu.children" />
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attribute ref="compact"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="menu.children">
+ <xs:choice>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element maxOccurs="unbounded" minOccurs="0" ref="li" />
+ <xs:group ref="cdk:structural" />
+ </xs:choice>
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="meta.content">
+ <xs:attributeGroup ref="i18n"></xs:attributeGroup>
+ <xs:attribute name="id" type="ID"></xs:attribute>
+ <xs:attribute name="http-equiv" type="xs:anySimpleType"></xs:attribute>
+ <xs:attribute name="name" type="xs:anySimpleType"></xs:attribute>
+ <xs:attribute use="required" name="content" type="xs:anySimpleType">
+ </xs:attribute>
+ <xs:attribute name="scheme" type="xs:anySimpleType"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:complexType name="object.content" mixed="true">
+ <xs:group ref="object.children" />
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attribute name="declare">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="declare"></xs:enumeration>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elMixedExpression"></xs:restriction>
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="classid" type="URI"></xs:attribute>
+ <xs:attribute name="codebase" type="URI"></xs:attribute>
+ <xs:attribute name="data" type="URI"></xs:attribute>
+ <xs:attribute name="type" type="ContentType"></xs:attribute>
+ <xs:attribute name="codetype" type="ContentType"></xs:attribute>
+ <xs:attribute name="archive" type="UriList"></xs:attribute>
+ <xs:attribute name="standby" type="Text"></xs:attribute>
+ <xs:attribute name="height" type="Length"></xs:attribute>
+ <xs:attribute name="width" type="Length"></xs:attribute>
+ <xs:attribute name="usemap" type="URI"></xs:attribute>
+ <xs:attribute name="name" type="NMTOKEN"></xs:attribute>
+ <xs:attribute name="tabindex" type="Number"></xs:attribute>
+ <xs:attribute name="align" type="ImgAlign"></xs:attribute>
+ <xs:attribute name="border" type="Pixels"></xs:attribute>
+ <xs:attribute name="hspace" type="Pixels"></xs:attribute>
+ <xs:attribute name="vspace" type="Pixels"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="object.children">
+ <xs:choice>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="object.children.elements" />
+ <xs:group ref="block" />
+ <xs:group ref="inline" />
+ <xs:group ref="misc" />
+ </xs:choice>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="object.children.elements">
+ <xs:choice>
+ <xs:element ref="param" />
+ <xs:element ref="form" />
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="ol.content">
+ <xs:group ref="ol.children" />
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attribute name="type" type="OLStyle"></xs:attribute>
+ <xs:attribute ref="compact"></xs:attribute>
+ <xs:attribute name="start" type="Number"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="ol.children">
+ <xs:choice>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element maxOccurs="unbounded" minOccurs="0" ref="li" />
+ <xs:group ref="cdk:structural" />
+ </xs:choice>
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="optgroup.content">
+ <xs:group ref="optgroup.children" />
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attribute ref="disabled"></xs:attribute>
+ <xs:attribute use="required" name="label" type="Text"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="optgroup.children">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="option" />
+ <xs:group ref="cdk:structural" />
+ </xs:sequence>
+ </xs:group>
+
+ <xs:complexType name="option.content" mixed="true">
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attribute name="selected">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="selected"></xs:enumeration>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elMixedExpression"></xs:restriction>
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute ref="disabled"></xs:attribute>
+ <xs:attribute name="label" type="Text"></xs:attribute>
+ <xs:attribute name="value" type="xs:anySimpleType"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:complexType name="param.content">
+ <xs:attribute name="id" type="ID"></xs:attribute>
+ <xs:attribute use="required" name="name" type="xs:anySimpleType">
+ </xs:attribute>
+ <xs:attribute name="value" type="xs:anySimpleType"></xs:attribute>
+ <xs:attribute default="data" name="valuetype">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="data"></xs:enumeration>
+ <xs:enumeration value="ref"></xs:enumeration>
+ <xs:enumeration value="object"></xs:enumeration>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elMixedExpression"></xs:restriction>
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="type" type="ContentType"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:complexType name="script.content" mixed="true">
+ <xs:attribute name="id" type="ID"></xs:attribute>
+ <xs:attribute name="charset" type="Charset"></xs:attribute>
+ <xs:attribute use="required" name="type" type="ContentType"></xs:attribute>
+ <xs:attribute name="language" type="xs:anySimpleType"></xs:attribute>
+ <xs:attribute name="src" type="URI"></xs:attribute>
+ <xs:attribute name="defer">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="defer"></xs:enumeration>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elMixedExpression"></xs:restriction>
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute fixed="preserve" ref="xml:space"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:complexType name="select.content">
+ <xs:group ref="select.children" />
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attribute name="name" type="xs:anySimpleType"></xs:attribute>
+ <xs:attribute name="size" type="Number"></xs:attribute>
+ <xs:attribute name="multiple">
+ <xs:simpleType>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="multiple" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="cdk:elMixedExpression" />
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute ref="disabled"></xs:attribute>
+ <xs:attribute name="tabindex" type="tabindexNumber"></xs:attribute>
+ <xs:attribute name="onfocus" type="Script"></xs:attribute>
+ <xs:attribute name="onblur" type="Script"></xs:attribute>
+ <xs:attribute name="onchange" type="Script"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="select.children">
+ <xs:choice>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="optgroup" />
+ <xs:element ref="option" />
+ <xs:group ref="cdk:structural" />
+ </xs:choice>
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="style.content" mixed="true">
+ <xs:attributeGroup ref="i18n"></xs:attributeGroup>
+ <xs:attribute name="id" type="ID"></xs:attribute>
+ <xs:attribute use="required" name="type" type="ContentType"></xs:attribute>
+ <xs:attribute name="media" type="MediaDesc"></xs:attribute>
+ <xs:attribute name="title" type="Text"></xs:attribute>
+ <xs:attribute fixed="preserve" ref="xml:space"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:complexType name="table.content">
+ <xs:group ref="table.children" />
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attribute name="summary" type="Text"></xs:attribute>
+ <xs:attribute name="width" type="Length"></xs:attribute>
+ <xs:attribute name="border" type="Pixels"></xs:attribute>
+ <xs:attribute name="frame" type="TFrame"></xs:attribute>
+ <xs:attribute name="rules" type="TRules"></xs:attribute>
+ <xs:attribute name="cellspacing" type="Length"></xs:attribute>
+ <xs:attribute name="cellpadding" type="Length"></xs:attribute>
+ <xs:attribute name="align" type="TAlign"></xs:attribute>
+ <xs:attribute name="bgcolor" type="Color"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="table.children">
+ <xs:sequence>
+ <xs:element minOccurs="0" ref="caption" />
+ <xs:choice>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="col" />
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="colgroup" />
+ </xs:choice>
+ <xs:element minOccurs="0" ref="thead" />
+ <xs:element minOccurs="0" ref="tfoot" />
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:choice>
+ <xs:group ref="cdk:structural" />
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="tbody" />
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="tr" />
+ </xs:choice>
+ </xs:choice>
+ </xs:sequence>
+ </xs:group>
+
+ <xs:complexType name="tbody.content">
+ <xs:group ref="tbody.children" />
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attributeGroup ref="cellhalign"></xs:attributeGroup>
+ <xs:attributeGroup ref="cellvalign"></xs:attributeGroup>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="tbody.children">
+ <xs:choice>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element maxOccurs="unbounded" minOccurs="0" ref="tr" />
+ <xs:group ref="cdk:structural" />
+ </xs:choice>
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="textarea.content" mixed="true">
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attributeGroup ref="focus"></xs:attributeGroup>
+ <xs:attribute name="name" type="xs:anySimpleType"></xs:attribute>
+ <xs:attribute use="required" name="rows" type="Number"></xs:attribute>
+ <xs:attribute use="required" name="cols" type="Number"></xs:attribute>
+ <xs:attribute ref="disabled"></xs:attribute>
+ <xs:attribute ref="readonly"></xs:attribute>
+ <xs:attribute name="onselect" type="Script"></xs:attribute>
+ <xs:attribute name="onchange" type="Script"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:complexType name="tfoot.content">
+ <xs:group ref="tfoot.children" />
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attributeGroup ref="cellhalign"></xs:attributeGroup>
+ <xs:attributeGroup ref="cellvalign"></xs:attributeGroup>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:group name="tfoot.children">
+ <xs:choice>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element maxOccurs="unbounded" minOccurs="0" ref="tr" />
+ <xs:group ref="cdk:structural" />
+ </xs:choice>
+ </xs:choice>
+ </xs:group>
+ <xs:complexType name="thead.content">
+ <xs:group ref="thead.children" />
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attributeGroup ref="cellhalign"></xs:attributeGroup>
+ <xs:attributeGroup ref="cellvalign"></xs:attributeGroup>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+ <xs:group name="thead.children">
+ <xs:choice>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element maxOccurs="unbounded" minOccurs="0" ref="tr" />
+ <xs:group ref="cdk:structural" />
+ </xs:choice>
+ </xs:choice>
+ </xs:group>
+ <xs:complexType name="title.content" mixed="true">
+ <xs:attributeGroup ref="i18n"></xs:attributeGroup>
+ <xs:attribute name="id" type="ID"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:complexType name="tr.content">
+ <xs:group ref="tr.children" />
+ <xs:attributeGroup ref="attrs"></xs:attributeGroup>
+ <xs:attributeGroup ref="cellhalign"></xs:attributeGroup>
+ <xs:attributeGroup ref="cellvalign"></xs:attributeGroup>
+ <xs:attribute name="bgcolor" type="Color"></xs:attribute>
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="tr.children">
+ <xs:choice>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element maxOccurs="unbounded" minOccurs="0" ref="th" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" ref="td" />
+ <xs:group ref="cdk:structural" />
+ </xs:choice>
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="ul.content">
+ <xs:group ref="ul.children" />
+ <xs:attributeGroup ref="attrs" />
+ <xs:attribute name="type" type="ULStyle" />
+ <xs:attribute ref="compact" />
+ <xs:attributeGroup ref="cdk:core.attrs" />
+ </xs:complexType>
+
+ <xs:group name="ul.children">
+ <xs:choice>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element maxOccurs="unbounded" minOccurs="0" ref="li" />
+ <xs:group ref="cdk:structural" />
+ </xs:choice>
+ </xs:choice>
+ </xs:group>
+</xs:schema>
Deleted: root/cdk/trunk/plugins/generator/src/main/xsd/xhtml1-transitional.xsd
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/xsd/xhtml1-transitional.xsd 2009-08-11 12:13:51 UTC (rev 15156)
+++ root/cdk/trunk/plugins/generator/src/main/xsd/xhtml1-transitional.xsd 2009-08-12 13:35:00 UTC (rev 15157)
@@ -1,3384 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xs:schema version="1.0" xml:lang="en"
- xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://richfaces.org/xhtml-el"
- xmlns="http://richfaces.org/xhtml-el" xmlns:xml="http://www.w3.org/XML/1998/namespace"
- elementFormDefault="qualified" xmlns:cdk="http://richfaces.org/cdk">
-
- <xs:import schemaLocation="cdk.xsd" namespace="http://richfaces.org/cdk" />
-
- <xs:annotation>
- <xs:documentation>
- XHTML 1.0 (Second Edition) Transitional in XML
- Schema
-
- This is the same as HTML 4 Transitional except for
- changes due
- to the differences between XML and SGML.
-
- Namespace =
- http://www.w3.org/1999/xhtml
-
- For further information, see:
- http://www.w3.org/TR/xhtml1
-
- Copyright (c) 1998-2002 W3C (MIT, INRIA,
- Keio),
- All Rights Reserved.
-
- The DTD version is identified by the PUBLIC
- and SYSTEM identifiers:
-
- PUBLIC "-//W3C//DTD XHTML 1.0
- Transitional//EN"
- SYSTEM
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
-
- $Id:
- xhtml1-transitional.xsd,v 1.5 2002/08/28 09:53:29 mimasa Exp $
- </xs:documentation>
- </xs:annotation>
-
- <xs:import namespace="http://www.w3.org/XML/1998/namespace"
- schemaLocation="http://www.w3.org/2001/xml.xsd" />
-
- <xs:annotation>
- <xs:documentation>
- ================ Character mnemonic entities
- =========================
-
- XHTML entity sets are identified by the
- PUBLIC and SYSTEM identifiers:
-
- PUBLIC "-//W3C//ENTITIES Latin 1 for
- XHTML//EN"
- SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"
-
- PUBLIC "-//W3C//ENTITIES Special for XHTML//EN"
- SYSTEM
- "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent"
-
- PUBLIC
- "-//W3C//ENTITIES Symbols for XHTML//EN"
- SYSTEM
- "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent"
- </xs:documentation>
- </xs:annotation>
-
- <xs:annotation>
- <xs:documentation>
- ================== Imported Names
- ====================================
- </xs:documentation>
- </xs:annotation>
-
- <xs:simpleType name="elOnlyExpression">
- <xs:restriction base="xs:string">
- <xs:pattern value=".*#\{[^\}]+\}.*" />
- </xs:restriction>
- </xs:simpleType>
-
- <xs:simpleType name="elExpression">
- <xs:restriction base="xs:string" />
- </xs:simpleType>
-
- <xs:simpleType name="ContentType">
- <xs:annotation>
- <xs:documentation>
- media type, as per [RFC2045]
- </xs:documentation>
- </xs:annotation>
- <xs:restriction base="elExpression" />
- </xs:simpleType>
-
- <xs:simpleType name="ContentTypes">
- <xs:annotation>
- <xs:documentation>
- comma-separated list of media types, as per
- [RFC2045]
- </xs:documentation>
- </xs:annotation>
- <xs:restriction base="elExpression" />
- </xs:simpleType>
-
- <xs:simpleType name="Charset">
- <xs:annotation>
- <xs:documentation>
- a character encoding, as per [RFC2045]
- </xs:documentation>
- </xs:annotation>
- <xs:restriction base="elExpression" />
- </xs:simpleType>
-
- <xs:simpleType name="Charsets">
- <xs:annotation>
- <xs:documentation>
- a space separated list of character encodings, as
- per [RFC2045]
- </xs:documentation>
- </xs:annotation>
- <xs:restriction base="elExpression" />
- </xs:simpleType>
-
- <xs:simpleType name="LanguageCode">
- <xs:annotation>
- <xs:documentation>
- a language code, as per [RFC3066]
- </xs:documentation>
- </xs:annotation>
- <xs:union memberTypes="xs:language elOnlyExpression" />
- </xs:simpleType>
-
- <xs:simpleType name="Character">
- <xs:annotation>
- <xs:documentation>
- a single character, as per section 2.2 of [XML]
- </xs:documentation>
- </xs:annotation>
- <!-- TODO test -->
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:string">
- <xs:length value="1" fixed="true" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
-
- <xs:simpleType name="simpleType.Number">
- <xs:restriction base="xs:nonNegativeInteger">
- <xs:pattern value="[0-9]+" />
- </xs:restriction>
- </xs:simpleType>
-
- <xs:simpleType name="Number">
- <xs:annotation>
- <xs:documentation>
- one or more digits
- </xs:documentation>
- </xs:annotation>
- <xs:union memberTypes="simpleType.Number elOnlyExpression" />
- </xs:simpleType>
-
- <xs:simpleType name="tabindexNumber">
- <xs:annotation>
- <xs:documentation>
- tabindex attribute specifies the position of the
- current element
- in the tabbing order for the current document. This
- value must be
- a number between 0 and 32767. User agents should ignore
- leading
- zeros.
- </xs:documentation>
- </xs:annotation>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="simpleType.Number">
- <xs:minInclusive value="0" />
- <xs:maxInclusive value="32767" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
-
- <xs:simpleType name="LinkTypes">
- <xs:annotation>
- <xs:documentation>
- space-separated list of link types
- </xs:documentation>
- </xs:annotation>
- <xs:union memberTypes="xs:NMTOKENS elOnlyExpression" />
- </xs:simpleType>
-
- <xs:simpleType name="MediaDesc">
- <xs:annotation>
- <xs:documentation>
- single or comma-separated list of media descriptors
- </xs:documentation>
- </xs:annotation>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:string">
- <xs:pattern value="[^,]+(,\s*[^,]+)*" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
-
- <xs:simpleType name="URI">
- <xs:annotation>
- <xs:documentation>
- a Uniform Resource Identifier, see [RFC2396]
- </xs:documentation>
- </xs:annotation>
- <xs:union memberTypes="xs:anyURI elOnlyExpression" />
- </xs:simpleType>
-
- <xs:simpleType name="UriList">
- <xs:annotation>
- <xs:documentation>
- a space separated list of Uniform Resource
- Identifiers
- </xs:documentation>
- </xs:annotation>
- <xs:restriction base="elExpression" />
- </xs:simpleType>
-
- <xs:simpleType name="Datetime">
- <xs:annotation>
- <xs:documentation>
- date and time information. ISO date format
- </xs:documentation>
- </xs:annotation>
- <xs:union memberTypes="xs:dateTime elOnlyExpression" />
- </xs:simpleType>
-
- <xs:simpleType name="Script">
- <xs:annotation>
- <xs:documentation>
- script expression
- </xs:documentation>
- </xs:annotation>
- <xs:restriction base="elExpression" />
- </xs:simpleType>
-
- <xs:simpleType name="StyleSheet">
- <xs:annotation>
- <xs:documentation>
- style sheet data
- </xs:documentation>
- </xs:annotation>
- <xs:restriction base="elExpression" />
- </xs:simpleType>
-
- <xs:simpleType name="Text">
- <xs:annotation>
- <xs:documentation>
- used for titles etc.
- </xs:documentation>
- </xs:annotation>
- <xs:restriction base="elExpression" />
- </xs:simpleType>
-
- <xs:simpleType name="FrameTarget">
- <xs:annotation>
- <xs:documentation>
- render in this frame
- </xs:documentation>
- </xs:annotation>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:NMTOKEN">
- <xs:pattern value="_(blank|self|parent|top)|[A-Za-z]\c*" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
-
- <xs:simpleType name="Length">
- <xs:annotation>
- <xs:documentation>
- nn for pixels or nn% for percentage length
- </xs:documentation>
- </xs:annotation>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:string">
- <xs:pattern value="[-+]?(\d+|\d+(\.\d+)?%)" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
-
- <xs:simpleType name="MultiLength">
- <xs:annotation>
- <xs:documentation>
- pixel, percentage, or relative
- </xs:documentation>
- </xs:annotation>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:string">
- <xs:pattern value="[-+]?(\d+|\d+(\.\d+)?%)|[1-9]?(\d+)?\*" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
-
- <xs:simpleType name="Pixels">
- <xs:annotation>
- <xs:documentation>
- integer representing length in pixels
- </xs:documentation>
- </xs:annotation>
- <xs:union memberTypes="xs:nonNegativeInteger elOnlyExpression" />
- </xs:simpleType>
-
- <xs:annotation>
- <xs:documentation>
- these are used for image maps
- </xs:documentation>
- </xs:annotation>
-
- <xs:simpleType name="Shape">
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="rect" />
- <xs:enumeration value="circle" />
- <xs:enumeration value="poly" />
- <xs:enumeration value="default" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
-
- <xs:simpleType name="Coords">
- <xs:annotation>
- <xs:documentation>
- comma separated list of lengths
- </xs:documentation>
- </xs:annotation>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:string">
- <xs:pattern value="[-+]?(\d+|\d+(\.\d+)?%)(,\s*[-+]?(\d+|\d+(\.\d+)?%))*" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
-
- <xs:simpleType name="ImgAlign">
- <xs:annotation>
- <xs:documentation>
- used for object, applet, img, input and iframe
- </xs:documentation>
- </xs:annotation>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="top" />
- <xs:enumeration value="middle" />
- <xs:enumeration value="bottom" />
- <xs:enumeration value="left" />
- <xs:enumeration value="right" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
-
- <xs:simpleType name="Color">
- <xs:annotation>
- <xs:documentation>
- a color using sRGB: #RRGGBB as Hex values
-
- There are
- also 16 widely known color names with their sRGB values:
-
- Black =
- #000000 Green = #008000
- Silver = #C0C0C0 Lime = #00FF00
- Gray = #808080
- Olive = #808000
- White = #FFFFFF Yellow = #FFFF00
- Maroon = #800000 Navy
- = #000080
- Red = #FF0000 Blue = #0000FF
- Purple = #800080 Teal = #008080
- Fuchsia= #FF00FF Aqua = #00FFFF
- </xs:documentation>
- </xs:annotation>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:string">
- <xs:pattern value="[A-Za-z]+|#[0-9A-Fa-f]{3}|#[0-9A-Fa-f]{6}" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
-
- <!-- TODO: add constraints -->
- <xs:simpleType name="ID">
- <xs:union memberTypes="xs:ID elOnlyExpression" />
- </xs:simpleType>
- <xs:simpleType name="IDREF">
- <xs:union memberTypes="xs:IDREF elOnlyExpression" />
- </xs:simpleType>
- <xs:simpleType name="IDREFS">
- <xs:union memberTypes="xs:IDREFS elOnlyExpression" />
- </xs:simpleType>
- <xs:simpleType name="NMTOKEN">
- <xs:union memberTypes="xs:NMTOKEN elOnlyExpression" />
- </xs:simpleType>
- <xs:simpleType name="NMTOKENS">
- <xs:union memberTypes="xs:NMTOKENS elOnlyExpression" />
- </xs:simpleType>
-
- <xs:annotation>
- <xs:documentation>
- =================== Generic Attributes
- ===============================
- </xs:documentation>
- </xs:annotation>
-
- <xs:attributeGroup name="coreattrs">
- <xs:annotation>
- <xs:documentation>
- core attributes common to most elements
- id
- document-wide unique id
- class space separated list of classes
- style
- associated style info
- title advisory title/amplification
- </xs:documentation>
- </xs:annotation>
- <xs:attribute name="id" type="ID" />
- <xs:attribute name="class" type="NMTOKENS" />
- <xs:attribute name="style" type="StyleSheet" />
- <xs:attribute name="title" type="Text" />
- </xs:attributeGroup>
-
- <xs:simpleType name="simpleType.dir">
- <xs:restriction base="xs:token">
- <xs:enumeration value="ltr" />
- <xs:enumeration value="rtl" />
- </xs:restriction>
- </xs:simpleType>
-
- <xs:attributeGroup name="i18n">
- <xs:annotation>
- <xs:documentation>
- internationalization attributes
- lang language code
- (backwards compatible)
- xml:lang language code (as per XML 1.0 spec)
- dir direction for weak/neutral text
- </xs:documentation>
- </xs:annotation>
- <xs:attribute name="lang" type="LanguageCode" />
-
- <!-- TODO: xml:lang can be made EL -->
- <xs:attribute ref="xml:lang" />
- <xs:attribute name="dir">
- <xs:simpleType>
- <xs:union memberTypes="simpleType.dir elOnlyExpression" />
- </xs:simpleType>
- </xs:attribute>
- </xs:attributeGroup>
-
- <xs:attributeGroup name="events">
- <xs:annotation>
- <xs:documentation>
- attributes for common UI events
- onclick a pointer
- button was clicked
- ondblclick a pointer button was double clicked
- onmousedown a pointer button was pressed down
- onmouseup a pointer
- button was released
- onmousemove a pointer was moved onto the element
- onmouseout a pointer was moved away from the element
- onkeypress a key
- was pressed and released
- onkeydown a key was pressed down
- onkeyup a
- key was released
- </xs:documentation>
- </xs:annotation>
- <xs:attribute name="onclick" type="Script" />
- <xs:attribute name="ondblclick" type="Script" />
- <xs:attribute name="onmousedown" type="Script" />
- <xs:attribute name="onmouseup" type="Script" />
- <xs:attribute name="onmouseover" type="Script" />
- <xs:attribute name="onmousemove" type="Script" />
- <xs:attribute name="onmouseout" type="Script" />
- <xs:attribute name="onkeypress" type="Script" />
- <xs:attribute name="onkeydown" type="Script" />
- <xs:attribute name="onkeyup" type="Script" />
- </xs:attributeGroup>
-
- <xs:attributeGroup name="focus">
- <xs:annotation>
- <xs:documentation>
- attributes for elements that can get the focus
- accesskey accessibility key character
- tabindex position in tabbing
- order
- onfocus the element got the focus
- onblur the element lost the
- focus
- </xs:documentation>
- </xs:annotation>
- <xs:attribute name="accesskey" type="Character" />
- <xs:attribute name="tabindex" type="tabindexNumber" />
- <xs:attribute name="onfocus" type="Script" />
- <xs:attribute name="onblur" type="Script" />
- </xs:attributeGroup>
-
- <xs:attributeGroup name="attrs">
- <xs:attributeGroup ref="coreattrs" />
- <xs:attributeGroup ref="i18n" />
- <xs:attributeGroup ref="events" />
- </xs:attributeGroup>
-
- <xs:attributeGroup name="TextAlign">
- <xs:annotation>
- <xs:documentation>
- text alignment for p, div, h1-h6. The default is
- align="left" for ltr headings, "right" for rtl
- </xs:documentation>
- </xs:annotation>
- <xs:attribute name="align">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="left" />
- <xs:enumeration value="center" />
- <xs:enumeration value="right" />
- <xs:enumeration value="justify" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
- </xs:attributeGroup>
-
- <xs:annotation>
- <xs:documentation>
- =================== Text Elements
- ====================================
- </xs:documentation>
- </xs:annotation>
-
- <xs:group name="special.extra">
- <xs:choice>
- <xs:element ref="object" />
- <xs:element ref="applet" />
- <xs:element ref="img" />
- <xs:element ref="map" />
- <xs:element ref="iframe" />
- </xs:choice>
- </xs:group>
-
- <xs:group name="special.basic">
- <xs:choice>
- <xs:element ref="br" />
- <xs:element ref="span" />
- <xs:element ref="bdo" />
- </xs:choice>
- </xs:group>
-
- <xs:group name="special">
- <xs:choice>
- <xs:group ref="special.basic" />
- <xs:group ref="special.extra" />
- </xs:choice>
- </xs:group>
-
- <xs:group name="fontstyle.extra">
- <xs:choice>
- <xs:element ref="big" />
- <xs:element ref="small" />
- <xs:element ref="font" />
- <xs:element ref="basefont" />
- </xs:choice>
- </xs:group>
-
- <xs:group name="fontstyle.basic">
- <xs:choice>
- <xs:element ref="tt" />
- <xs:element ref="i" />
- <xs:element ref="b" />
- <xs:element ref="u" />
- <xs:element ref="s" />
- <xs:element ref="strike" />
- </xs:choice>
- </xs:group>
-
- <xs:group name="fontstyle">
- <xs:choice>
- <xs:group ref="fontstyle.basic" />
- <xs:group ref="fontstyle.extra" />
- </xs:choice>
- </xs:group>
-
- <xs:group name="phrase.extra">
- <xs:choice>
- <xs:element ref="sub" />
- <xs:element ref="sup" />
- </xs:choice>
- </xs:group>
-
- <xs:group name="phrase.basic">
- <xs:choice>
- <xs:element ref="em" />
- <xs:element ref="strong" />
- <xs:element ref="dfn" />
- <xs:element ref="code" />
- <xs:element ref="q" />
- <xs:element ref="samp" />
- <xs:element ref="kbd" />
- <xs:element ref="var" />
- <xs:element ref="cite" />
- <xs:element ref="abbr" />
- <xs:element ref="acronym" />
- </xs:choice>
- </xs:group>
-
- <xs:group name="phrase">
- <xs:choice>
- <xs:group ref="phrase.basic" />
- <xs:group ref="phrase.extra" />
- </xs:choice>
- </xs:group>
-
- <xs:group name="inline.forms">
- <xs:choice>
- <xs:element ref="input" />
- <xs:element ref="select" />
- <xs:element ref="textarea" />
- <xs:element ref="label" />
- <xs:element ref="button" />
- </xs:choice>
- </xs:group>
-
- <xs:group name="misc.inline">
- <xs:annotation>
- <xs:documentation>
- these can only occur at block level
- </xs:documentation>
- </xs:annotation>
- <xs:choice>
- <xs:group ref="cdk:structural" />
- <xs:element ref="ins" />
- <xs:element ref="del" />
- <xs:element ref="script" />
- </xs:choice>
- </xs:group>
-
- <xs:group name="misc">
- <xs:annotation>
- <xs:documentation>
- these can only occur at block level
- </xs:documentation>
- </xs:annotation>
- <xs:choice>
- <xs:group ref="misc.elements" />
- <xs:group ref="misc.inline" />
- </xs:choice>
- </xs:group>
-
- <xs:group name="misc.elements">
- <xs:choice>
- <xs:element ref="noscript" />
- </xs:choice>
- </xs:group>
-
- <xs:group name="inline">
- <xs:choice>
- <xs:group ref="inline.elements" />
- <xs:group ref="special" />
- <xs:group ref="fontstyle" />
- <xs:group ref="phrase" />
- <xs:group ref="inline.forms" />
- </xs:choice>
- </xs:group>
-
- <xs:group name="inline.elements">
- <xs:choice>
- <xs:element ref="a" />
- </xs:choice>
- </xs:group>
-
- <xs:complexType name="Inline" mixed="true">
- <xs:annotation>
- <xs:documentation>
- "Inline" covers inline or "text-level" element
- </xs:documentation>
- </xs:annotation>
- <xs:group ref="Inline.content" />
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="Inline.content">
- <xs:choice>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:group ref="inline" />
- <xs:group ref="misc.inline" />
- </xs:choice>
- </xs:choice>
- </xs:group>
-
- <xs:annotation>
- <xs:documentation>
- ================== Block level elements
- ==============================
- </xs:documentation>
- </xs:annotation>
-
- <xs:group name="heading">
- <xs:choice>
- <xs:element ref="h1" />
- <xs:element ref="h2" />
- <xs:element ref="h3" />
- <xs:element ref="h4" />
- <xs:element ref="h5" />
- <xs:element ref="h6" />
- </xs:choice>
- </xs:group>
-
- <xs:group name="lists">
- <xs:choice>
- <xs:element ref="ul" />
- <xs:element ref="ol" />
- <xs:element ref="dl" />
- <xs:element ref="menu" />
- <xs:element ref="dir" />
- </xs:choice>
- </xs:group>
-
- <xs:group name="blocktext">
- <xs:choice>
- <xs:element ref="pre" />
- <xs:element ref="hr" />
- <xs:element ref="blockquote" />
- <xs:element ref="address" />
- <xs:element ref="center" />
- <xs:element ref="noframes" />
- </xs:choice>
- </xs:group>
-
- <xs:group name="block">
- <xs:choice>
- <xs:group ref="block.children" />
- <xs:group ref="heading" />
- <xs:group ref="lists" />
- <xs:group ref="blocktext" />
- </xs:choice>
- </xs:group>
-
- <xs:group name="block.children">
- <xs:choice>
- <xs:element ref="p" />
- <xs:element ref="div" />
- <xs:element ref="isindex" />
- <xs:element ref="fieldset" />
- <xs:element ref="table" />
- </xs:choice>
- </xs:group>
-
- <xs:complexType name="Flow" mixed="true">
- <xs:annotation>
- <xs:documentation>
- "Flow" mixes block and inline and is used for list
- items etc.
- </xs:documentation>
- </xs:annotation>
- <xs:group ref="Flow.children" />
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="Flow.children">
- <xs:choice>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:group ref="block" />
- <xs:group ref="form.element.group" />
- <xs:group ref="inline" />
- <xs:group ref="misc" />
- </xs:choice>
- </xs:choice>
- </xs:group>
-
- <xs:group name="form.element.group">
- <xs:choice>
- <xs:element ref="form" />
- </xs:choice>
- </xs:group>
-
- <xs:annotation>
- <xs:documentation>
- ================== Content models for exclusions
- =====================
- </xs:documentation>
- </xs:annotation>
-
- <xs:complexType name="a.content" mixed="true">
- <xs:group ref="a.children" minOccurs="0" maxOccurs="unbounded" />
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attributeGroup ref="focus"></xs:attributeGroup>
- <xs:attribute name="charset" type="Charset"></xs:attribute>
- <xs:attribute name="type" type="ContentType"></xs:attribute>
- <xs:attribute name="name" type="NMTOKEN"></xs:attribute>
- <xs:attribute name="href" type="URI"></xs:attribute>
- <xs:attribute name="hreflang" type="LanguageCode"></xs:attribute>
- <xs:attribute name="rel" type="LinkTypes"></xs:attribute>
- <xs:attribute name="rev" type="LinkTypes"></xs:attribute>
- <xs:attribute default="rect" name="shape" type="Shape"></xs:attribute>
- <xs:attribute name="coords" type="Coords"></xs:attribute>
- <xs:attribute name="target" type="FrameTarget"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="a.children">
- <xs:choice>
- <xs:group ref="special"></xs:group>
- <xs:group ref="fontstyle"></xs:group>
- <xs:group ref="phrase"></xs:group>
- <xs:group ref="inline.forms"></xs:group>
- <xs:group ref="misc.inline"></xs:group>
- </xs:choice>
- </xs:group>
-
- <xs:complexType name="pre.content" mixed="true">
- <xs:annotation>
- <xs:documentation>
- pre uses "Inline" excluding img, object, applet,
- big, small,
- font, or basefont
- </xs:documentation>
- </xs:annotation>
- <xs:group ref="pre.children" />
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="pre.children">
- <xs:choice>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:group ref="a.element.group" />
- <xs:group ref="special.basic" />
- <xs:group ref="fontstyle.basic" />
- <xs:group ref="phrase.basic" />
- <xs:group ref="inline.forms" />
- <xs:group ref="misc.inline" />
- </xs:choice>
- </xs:choice>
- </xs:group>
-
- <xs:group name="a.element.group">
- <xs:choice>
- <xs:element ref="a" />
- </xs:choice>
- </xs:group>
-
- <xs:complexType name="form.content" mixed="true">
- <xs:annotation>
- <xs:documentation>
- form uses "Flow" excluding form
- </xs:documentation>
- </xs:annotation>
- <xs:group ref="form.children" />
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="form.children">
- <xs:choice>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:group ref="block" />
- <xs:group ref="inline" />
- <xs:group ref="misc" />
- </xs:choice>
- </xs:choice>
- </xs:group>
-
- <xs:complexType name="button.content" mixed="true">
- <xs:annotation>
- <xs:documentation>
- button uses "Flow" but excludes a, form, form
- controls, iframe
- </xs:documentation>
- </xs:annotation>
- <xs:group ref="button.children" />
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="button.children">
- <xs:choice>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:group ref="button.children.elements" />
- <xs:group ref="heading" />
- <xs:group ref="lists" />
- <xs:group ref="blocktext" />
- <xs:group ref="fontstyle" />
- <xs:group ref="phrase" />
- <xs:group ref="misc" />
- </xs:choice>
- </xs:choice>
- </xs:group>
-
- <xs:group name="button.children.elements">
- <xs:choice>
- <xs:element ref="p" />
- <xs:element ref="div" />
- <xs:element ref="table" />
- <xs:element ref="br" />
- <xs:element ref="span" />
- <xs:element ref="bdo" />
- <xs:element ref="object" />
- <xs:element ref="applet" />
- <xs:element ref="img" />
- <xs:element ref="map" />
- </xs:choice>
- </xs:group>
-
- <xs:annotation>
- <xs:documentation>
- ================ Document Structure
- ==================================
- </xs:documentation>
- </xs:annotation>
-
- <xs:element name="html" type="html.content">
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- ================ Document Head
- =======================================
- </xs:documentation>
- </xs:annotation>
-
- <xs:group name="head.misc">
- <xs:sequence>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:group ref="cdk:structural" minOccurs="0" maxOccurs="unbounded" />
- <xs:element ref="script" />
- <xs:element ref="style" />
- <xs:element ref="meta" />
- <xs:element ref="link" />
- <xs:element ref="object" />
- <xs:element ref="isindex" />
- </xs:choice>
- </xs:sequence>
- </xs:group>
-
- <xs:element name="head" type="head.content">
- <xs:annotation>
- <xs:documentation>
- content model is "head.misc" combined with a single
- title and an optional base element in any order
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:element name="title" type="title.content">
- <xs:annotation>
- <xs:documentation>
- The title element is not considered part of the
- flow of text.
- It should be displayed, for example as the page header
- or
- window title. Exactly one title is required per document.
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:element name="base" type="base.content">
- <xs:annotation>
- <xs:documentation>
- document base URI
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:element name="meta" type="meta.content">
- <xs:annotation>
- <xs:documentation>
- generic metainformation
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:element name="link" type="link.content">
- <xs:annotation>
- <xs:documentation>
- Relationship values can be used in principle:
-
- a) for
- document specific toolbars/menus when used
- with the link element in
- document head e.g.
- start, contents, previous, next, index, end, help
- b) to link to a separate style sheet (rel="stylesheet")
- c) to make a
- link to a script (rel="script")
- d) by stylesheets to control how
- collections of
- html nodes are rendered into printed documents
- e) to
- make a link to a printable version of this document
- e.g. a PostScript
- or PDF version (rel="alternate" media="print")
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:element name="style" type="style.content">
- <xs:annotation>
- <xs:documentation>
- style info, which may include CDATA sections
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:element name="script" type="script.content">
- <xs:annotation>
- <xs:documentation>
- script statements, which may include CDATA sections
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:element name="noscript">
- <xs:annotation>
- <xs:documentation>
- alternate content container for non script-based
- rendering
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Flow">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- ======================= Frames
- =======================================
- </xs:documentation>
- </xs:annotation>
-
- <xs:element name="iframe">
- <xs:annotation>
- <xs:documentation>
- inline subwindow
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Flow">
- <xs:attributeGroup ref="coreattrs" />
- <xs:attribute name="longdesc" type="URI" />
- <xs:attribute name="name" type="NMTOKEN" />
- <xs:attribute name="src" type="URI" />
- <xs:attribute name="frameborder" default="1">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="1" />
- <xs:enumeration value="0" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
- <xs:attribute name="marginwidth" type="Pixels" />
- <xs:attribute name="marginheight" type="Pixels" />
- <xs:attribute name="scrolling" default="auto">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="yes" />
- <xs:enumeration value="no" />
- <xs:enumeration value="auto" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
- <xs:attribute name="align" type="ImgAlign" />
- <xs:attribute name="height" type="Length" />
- <xs:attribute name="width" type="Length" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="noframes">
- <xs:annotation>
- <xs:documentation>
- alternate content container for non frame-based
- rendering
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Flow">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- =================== Document Body
- ====================================
- </xs:documentation>
- </xs:annotation>
-
- <xs:element name="body">
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Flow">
- <xs:attributeGroup ref="attrs" />
- <xs:attribute name="onload" type="Script" />
- <xs:attribute name="onunload" type="Script" />
- <xs:attribute name="background" type="URI" />
- <xs:attribute name="bgcolor" type="Color" />
- <xs:attribute name="text" type="Color" />
- <xs:attribute name="link" type="Color" />
- <xs:attribute name="vlink" type="Color" />
- <xs:attribute name="alink" type="Color" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="div">
- <xs:annotation>
- <xs:documentation>
- generic language/style container
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Flow">
- <xs:attributeGroup ref="attrs" />
- <xs:attributeGroup ref="TextAlign" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- =================== Paragraphs
- =======================================
- </xs:documentation>
- </xs:annotation>
-
- <xs:element name="p">
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- <xs:attributeGroup ref="TextAlign" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- =================== Headings
- =========================================
-
- There are six levels of
- headings from h1 (the most important)
- to h6 (the least important).
- </xs:documentation>
- </xs:annotation>
-
- <xs:element name="h1">
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- <xs:attributeGroup ref="TextAlign" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="h2">
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- <xs:attributeGroup ref="TextAlign" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="h3">
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- <xs:attributeGroup ref="TextAlign" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="h4">
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- <xs:attributeGroup ref="TextAlign" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="h5">
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- <xs:attributeGroup ref="TextAlign" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="h6">
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- <xs:attributeGroup ref="TextAlign" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- =================== Lists
- ============================================
- </xs:documentation>
- </xs:annotation>
-
- <xs:simpleType name="ULStyle">
- <xs:annotation>
- <xs:documentation>
- Unordered list bullet styles
- </xs:documentation>
- </xs:annotation>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="disc" />
- <xs:enumeration value="square" />
- <xs:enumeration value="circle" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
-
- <xs:attribute name="compact">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="compact" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
-
- <xs:element name="ul" type="ul.content">
- <xs:annotation>
- <xs:documentation>
- Unordered list
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:simpleType name="OLStyle">
- <xs:annotation>
- <xs:documentation>
- Ordered list numbering style
-
- 1 arabic numbers 1, 2,
- 3, ...
- a lower alpha a, b, c, ...
- A upper alpha A, B, C, ...
- i lower
- roman i, ii, iii, ...
- I upper roman I, II, III, ...
-
- The style is
- applied to the sequence number which by default
- is reset to 1 for the
- first list item in an ordered list.
- </xs:documentation>
- </xs:annotation>
- <xs:restriction base="elExpression" />
- </xs:simpleType>
-
- <xs:element name="ol" type="ol.content">
- <xs:annotation>
- <xs:documentation>
- Ordered (numbered) list
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:element name="menu" type="menu.content">
- <xs:annotation>
- <xs:documentation>
- single column list (DEPRECATED)
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:element name="dir" type="dir.content">
- <xs:annotation>
- <xs:documentation>
- multiple column list (DEPRECATED)
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:simpleType name="LIStyle">
- <xs:annotation>
- <xs:documentation>
- LIStyle is constrained to: "(ULStyle|OLStyle)"
- </xs:documentation>
- </xs:annotation>
- <xs:restriction base="elExpression" />
- </xs:simpleType>
-
- <xs:element name="li">
- <xs:annotation>
- <xs:documentation>
- list item
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Flow">
- <xs:attributeGroup ref="attrs" />
- <xs:attribute name="type" type="LIStyle" />
- <xs:attribute name="value" type="Number" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- definition lists - dt for term, dd for its
- definition
- </xs:documentation>
- </xs:annotation>
-
- <xs:element name="dl" type="dl.content" />
-
- <xs:element name="dt">
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="dd">
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Flow">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- =================== Address
- ==========================================
- </xs:documentation>
- </xs:annotation>
-
- <xs:element name="address" type="address.content">
- <xs:annotation>
- <xs:documentation>
- information on author
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- =================== Horizontal Rule
- ==================================
- </xs:documentation>
- </xs:annotation>
-
- <xs:element name="hr" type="hr.content">
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- =================== Preformatted Text
- ================================
- </xs:documentation>
- </xs:annotation>
-
- <xs:element name="pre">
- <xs:annotation>
- <xs:documentation>
- content is "Inline" excluding
- "img|object|applet|big|small|sub|sup|font|basefont"
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="pre.content">
- <xs:attributeGroup ref="attrs" />
- <xs:attribute name="width" type="Number" />
- <xs:attribute ref="xml:space" fixed="preserve" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- =================== Block-like Quotes
- ================================
- </xs:documentation>
- </xs:annotation>
-
- <xs:element name="blockquote">
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Flow">
- <xs:attributeGroup ref="attrs" />
- <xs:attribute name="cite" type="URI" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- =================== Text alignment
- ===================================
- </xs:documentation>
- </xs:annotation>
-
- <xs:element name="center">
- <xs:annotation>
- <xs:documentation>
- center content
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Flow">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- =================== Inserted/Deleted Text
- ============================
-
- ins/del are allowed in block and inline
- content, but its
- inappropriate to include block content within an ins
- element
- occurring in inline content.
- </xs:documentation>
- </xs:annotation>
-
- <xs:element name="ins">
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Flow">
- <xs:attributeGroup ref="attrs" />
- <xs:attribute name="cite" type="URI" />
- <xs:attribute name="datetime" type="Datetime" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="del">
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Flow">
- <xs:attributeGroup ref="attrs" />
- <xs:attribute name="cite" type="URI" />
- <xs:attribute name="datetime" type="Datetime" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- ================== The Anchor Element
- ================================
- </xs:documentation>
- </xs:annotation>
-
- <xs:element name="a" type="a.content">
- <xs:annotation>
- <xs:documentation>
- content is "Inline" except that anchors shouldn't
- be nested
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- ===================== Inline Elements
- ================================
- </xs:documentation>
- </xs:annotation>
-
- <xs:element name="span">
- <xs:annotation>
- <xs:documentation>
- generic language/style container
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="bdo">
- <xs:annotation>
- <xs:documentation>
- I18N BiDi over-ride
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="coreattrs" />
- <xs:attributeGroup ref="events" />
- <xs:attribute name="lang" type="LanguageCode" />
- <xs:attribute ref="xml:lang" />
- <xs:attribute name="dir" use="required">
- <xs:simpleType>
- <xs:union memberTypes="simpleType.dir elOnlyExpression" />
- </xs:simpleType>
- </xs:attribute>
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="br" type="br.content">
- <xs:annotation>
- <xs:documentation>
- forced line break
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:element name="em">
- <xs:annotation>
- <xs:documentation>
- emphasis
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="strong">
- <xs:annotation>
- <xs:documentation>
- strong emphasis
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="dfn">
- <xs:annotation>
- <xs:documentation>
- definitional
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="code">
- <xs:annotation>
- <xs:documentation>
- program code
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="samp">
- <xs:annotation>
- <xs:documentation>
- sample
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="kbd">
- <xs:annotation>
- <xs:documentation>
- something user would type
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="var">
- <xs:annotation>
- <xs:documentation>
- variable
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="cite">
- <xs:annotation>
- <xs:documentation>
- citation
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="abbr">
- <xs:annotation>
- <xs:documentation>
- abbreviation
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="acronym">
- <xs:annotation>
- <xs:documentation>
- acronym
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="q">
- <xs:annotation>
- <xs:documentation>
- inlined quote
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- <xs:attribute name="cite" type="URI" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="sub">
- <xs:annotation>
- <xs:documentation>
- subscript
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="sup">
- <xs:annotation>
- <xs:documentation>
- superscript
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="tt">
- <xs:annotation>
- <xs:documentation>
- fixed pitch font
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="i">
- <xs:annotation>
- <xs:documentation>
- italic font
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="b">
- <xs:annotation>
- <xs:documentation>
- bold font
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="big">
- <xs:annotation>
- <xs:documentation>
- bigger font
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="small">
- <xs:annotation>
- <xs:documentation>
- smaller font
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="u">
- <xs:annotation>
- <xs:documentation>
- underline
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="s">
- <xs:annotation>
- <xs:documentation>
- strike-through
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="strike">
- <xs:annotation>
- <xs:documentation>
- strike-through
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="basefont" type="basefont.content">
- <xs:annotation>
- <xs:documentation>
- base font size
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:element name="font">
- <xs:annotation>
- <xs:documentation>
- local change to font
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="coreattrs" />
- <xs:attributeGroup ref="i18n" />
- <xs:attribute name="size" />
- <xs:attribute name="color" type="Color" />
- <xs:attribute name="face" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- ==================== Object
- ======================================
-
- object is used to embed objects
- as part of HTML pages.
- param elements should precede other content.
- Parameters
- can also be expressed as attribute/value pairs on the
- object element itself when brevity is desired.
- </xs:documentation>
- </xs:annotation>
-
- <xs:element name="object" type="object.content" />
-
- <xs:element name="param" type="param.content">
- <xs:annotation>
- <xs:documentation>
- param is used to supply a named property value.
- In
- XML it would seem natural to follow RDF and support an
- abbreviated
- syntax where the param elements are replaced
- by attribute value pairs
- on the object start tag.
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- =================== Java applet
- ==================================
-
- One of code or object attributes
- must be present.
- Place param elements before other content.
- </xs:documentation>
- </xs:annotation>
-
- <xs:element name="applet" type="applet.content">
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- =================== Images
- ===========================================
-
- To avoid accessibility
- problems for people who aren't
- able to see the image, you should
- provide a text
- description using the alt and longdesc attributes.
- In
- addition, avoid the use of server-side image maps.
- </xs:documentation>
- </xs:annotation>
-
- <xs:element name="img" type="img.content">
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- ================== Client-side image maps
- ============================
-
- These can be placed in the same document
- or grouped in a
- separate document although this isn't yet widely
- supported
- </xs:documentation>
- </xs:annotation>
-
- <xs:element name="map" type="map.content">
- </xs:element>
-
- <xs:element name="area" type="area.content">
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- ================ Forms
- ===============================================
- </xs:documentation>
- </xs:annotation>
-
- <xs:element name="form">
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="form.content">
- <xs:attributeGroup ref="attrs" />
- <xs:attribute name="action" use="required" type="URI" />
- <xs:attribute name="method" default="get">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="get" />
- <xs:enumeration value="post" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
- <xs:attribute name="enctype" type="ContentType"
- default="application/x-www-form-urlencoded" />
- <xs:attribute name="onsubmit" type="Script" />
- <xs:attribute name="onreset" type="Script" />
- <xs:attribute name="accept" type="ContentTypes" />
- <xs:attribute name="accept-charset" type="Charsets" />
- <xs:attribute name="target" type="FrameTarget" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="label">
- <xs:annotation>
- <xs:documentation>
- Each label must not contain more than ONE field
- Label elements shouldn't be nested.
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- <xs:attribute name="for" type="IDREF" />
- <xs:attribute name="accesskey" type="Character" />
- <xs:attribute name="onfocus" type="Script" />
- <xs:attribute name="onblur" type="Script" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:simpleType name="InputType">
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="text" />
- <xs:enumeration value="password" />
- <xs:enumeration value="checkbox" />
- <xs:enumeration value="radio" />
- <xs:enumeration value="submit" />
- <xs:enumeration value="reset" />
- <xs:enumeration value="file" />
- <xs:enumeration value="hidden" />
- <xs:enumeration value="image" />
- <xs:enumeration value="button" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
-
- <xs:attribute name="checked">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="checked" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
- <xs:attribute name="disabled">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="disabled" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
- <xs:attribute name="readonly">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="readonly" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
-
- <xs:element name="input" type="input.content">
- <xs:annotation>
- <xs:documentation>
- form control
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:element name="select" type="select.content">
- <xs:annotation>
- <xs:documentation>
- option selector
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:element name="optgroup" type="optgroup.content">
- <xs:annotation>
- <xs:documentation>
- option group
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:element name="option" type="option.content">
- <xs:annotation>
- <xs:documentation>
- selectable choice
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:element name="textarea" type="textarea.content">
- <xs:annotation>
- <xs:documentation>
- multi-line text field
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:element name="fieldset" type="fieldset.content">
- <xs:annotation>
- <xs:documentation>
- The fieldset element is used to group form fields.
- Only one legend element should occur in the content
- and if present
- should only be preceded by whitespace.
-
- NOTE: this content model is
- different from the XHTML 1.0 DTD,
- closer to the intended content
- model in HTML4 DTD
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:simpleType name="LAlign">
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="top" />
- <xs:enumeration value="bottom" />
- <xs:enumeration value="left" />
- <xs:enumeration value="right" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
-
- <xs:element name="legend">
- <xs:annotation>
- <xs:documentation>
- fieldset label
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- <xs:attribute name="accesskey" type="Character" />
- <xs:attribute name="align" type="LAlign" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="button">
- <xs:annotation>
- <xs:documentation>
- Content is "Flow" excluding a, form and form
- controls
- </xs:documentation>
- </xs:annotation>
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="button.content">
- <xs:attributeGroup ref="attrs" />
- <xs:attributeGroup ref="focus" />
- <xs:attribute name="name" />
- <xs:attribute name="value" />
- <xs:attribute name="type" default="submit">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="button" />
- <xs:enumeration value="submit" />
- <xs:enumeration value="reset" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
- <xs:attribute ref="disabled" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="isindex" type="isindex.content">
- <xs:annotation>
- <xs:documentation>
- single-line text input control (DEPRECATED)
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- ======================= Tables
- =======================================
-
- Derived from IETF HTML table
- standard, see [RFC1942]
- </xs:documentation>
- </xs:annotation>
-
- <xs:simpleType name="TFrame">
- <xs:annotation>
- <xs:documentation>
- The border attribute sets the thickness of the
- frame around the
- table. The default units are screen pixels.
-
- The frame
- attribute specifies which parts of the frame around
- the table should
- be rendered. The values are not the same as
- CALS to avoid a name
- clash with the valign attribute.
- </xs:documentation>
- </xs:annotation>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="void" />
- <xs:enumeration value="above" />
- <xs:enumeration value="below" />
- <xs:enumeration value="hsides" />
- <xs:enumeration value="lhs" />
- <xs:enumeration value="rhs" />
- <xs:enumeration value="vsides" />
- <xs:enumeration value="box" />
- <xs:enumeration value="border" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
-
- <xs:simpleType name="TRules">
- <xs:annotation>
- <xs:documentation>
- The rules attribute defines which rules to draw
- between cells:
-
- If rules is absent then assume:
- "none" if border is
- absent or border="0" otherwise "all"
- </xs:documentation>
- </xs:annotation>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="none" />
- <xs:enumeration value="groups" />
- <xs:enumeration value="rows" />
- <xs:enumeration value="cols" />
- <xs:enumeration value="all" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
-
- <xs:simpleType name="TAlign">
- <xs:annotation>
- <xs:documentation>
- horizontal placement of table relative to document
- </xs:documentation>
- </xs:annotation>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="left" />
- <xs:enumeration value="center" />
- <xs:enumeration value="right" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
-
- <xs:attributeGroup name="cellhalign">
- <xs:annotation>
- <xs:documentation>
- horizontal alignment attributes for cell contents
-
- char alignment char, e.g. char=':'
- charoff offset for alignment char
- </xs:documentation>
- </xs:annotation>
- <xs:attribute name="align">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="left" />
- <xs:enumeration value="center" />
- <xs:enumeration value="right" />
- <xs:enumeration value="justify" />
- <xs:enumeration value="char" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
- <xs:attribute name="char" type="Character" />
- <xs:attribute name="charoff" type="Length" />
- </xs:attributeGroup>
-
- <xs:attributeGroup name="cellvalign">
- <xs:annotation>
- <xs:documentation>
- vertical alignment attributes for cell contents
- </xs:documentation>
- </xs:annotation>
- <xs:attribute name="valign">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="top" />
- <xs:enumeration value="middle" />
- <xs:enumeration value="bottom" />
- <xs:enumeration value="baseline" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
- </xs:attributeGroup>
-
- <xs:element name="table" type="table.content">
- </xs:element>
-
- <xs:simpleType name="CAlign">
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="top" />
- <xs:enumeration value="bottom" />
- <xs:enumeration value="left" />
- <xs:enumeration value="right" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
-
- <xs:element name="caption">
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Inline">
- <xs:attributeGroup ref="attrs" />
- <xs:attribute name="align" type="CAlign" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:annotation>
- <xs:documentation>
- Use thead to duplicate headers when breaking table
- across page boundaries, or for static headers when
- tbody sections are
- rendered in scrolling panel.
-
- Use tfoot to duplicate footers when
- breaking table
- across page boundaries, or for static footers when
- tbody sections are rendered in scrolling panel.
-
- Use multiple tbody
- sections when rules are needed
- between groups of table rows.
- </xs:documentation>
- </xs:annotation>
-
- <xs:element name="thead" type="thead.content">
- </xs:element>
-
- <xs:element name="tfoot" type="tfoot.content">
- </xs:element>
-
- <xs:element name="tbody" type="tbody.content">
- </xs:element>
-
- <xs:element name="colgroup" type="colgroup.content">
- <xs:annotation>
- <xs:documentation>
- colgroup groups a set of col elements. It allows
- you to group
- several semantically related columns together.
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:element name="col" type="col.content">
- <xs:annotation>
- <xs:documentation>
- col elements define the alignment properties for
- cells in
- one or more columns.
-
- The width attribute specifies the width
- of the columns, e.g.
-
- width=64 width in screen pixels
- width=0.5*
- relative width of 0.5
-
- The span attribute causes the attributes of one
- col element to apply to more than one column.
- </xs:documentation>
- </xs:annotation>
- </xs:element>
-
- <xs:element name="tr" type="tr.content">
- </xs:element>
-
- <xs:simpleType name="Scope">
- <xs:annotation>
- <xs:documentation>
- Scope is simpler than headers attribute for common
- tables
- </xs:documentation>
- </xs:annotation>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="row" />
- <xs:enumeration value="col" />
- <xs:enumeration value="rowgroup" />
- <xs:enumeration value="colgroup" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
-
- <xs:annotation>
- <xs:documentation>
- th is for headers, td for data and for cells acting
- as both
- </xs:documentation>
- </xs:annotation>
-
- <xs:attribute name="nowrap">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="nowrap" />
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression" />
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
-
- <xs:element name="th">
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Flow">
- <xs:attributeGroup ref="attrs" />
- <xs:attribute name="abbr" type="Text" />
- <xs:attribute name="axis" />
- <xs:attribute name="headers" type="IDREFS" />
- <xs:attribute name="scope" type="Scope" />
- <xs:attribute name="rowspan" default="1" type="Number" />
- <xs:attribute name="colspan" default="1" type="Number" />
- <xs:attributeGroup ref="cellhalign" />
- <xs:attributeGroup ref="cellvalign" />
- <xs:attribute ref="nowrap" />
- <xs:attribute name="bgcolor" type="Color" />
- <xs:attribute name="width" type="Length" />
- <xs:attribute name="height" type="Length" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="td">
- <xs:complexType mixed="true">
- <xs:complexContent>
- <xs:extension base="Flow">
- <xs:attributeGroup ref="attrs" />
- <xs:attribute name="abbr" type="Text" />
- <xs:attribute name="axis" />
- <xs:attribute name="headers" type="IDREFS" />
- <xs:attribute name="scope" type="Scope" />
- <xs:attribute name="rowspan" default="1" type="Number" />
- <xs:attribute name="colspan" default="1" type="Number" />
- <xs:attributeGroup ref="cellhalign" />
- <xs:attributeGroup ref="cellvalign" />
- <xs:attribute ref="nowrap" />
- <xs:attribute name="bgcolor" type="Color" />
- <xs:attribute name="width" type="Length" />
- <xs:attribute name="height" type="Length" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:complexType name="address.content" mixed="true">
- <xs:group ref="address.children" />
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="address.children">
- <xs:choice>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:group ref="inline"></xs:group>
- <xs:group ref="misc.inline"></xs:group>
- <xs:group ref="address.children.elements" />
- </xs:choice>
- </xs:choice>
- </xs:group>
-
- <xs:group name="address.children.elements">
- <xs:choice>
- <xs:element ref="p" />
- </xs:choice>
- </xs:group>
-
- <xs:complexType name="applet.content" mixed="true">
- <xs:group ref="applet.children" />
- <xs:attributeGroup ref="coreattrs"></xs:attributeGroup>
- <xs:attribute name="codebase" type="URI"></xs:attribute>
- <xs:attribute name="archive" type="xs:anySimpleType"></xs:attribute>
- <xs:attribute name="code" type="xs:anySimpleType"></xs:attribute>
- <xs:attribute name="object" type="xs:anySimpleType"></xs:attribute>
- <xs:attribute name="alt" type="Text"></xs:attribute>
- <xs:attribute name="name" type="NMTOKEN"></xs:attribute>
- <xs:attribute use="required" name="width" type="Length"></xs:attribute>
- <xs:attribute use="required" name="height" type="Length"></xs:attribute>
- <xs:attribute name="align" type="ImgAlign"></xs:attribute>
- <xs:attribute name="hspace" type="Pixels"></xs:attribute>
- <xs:attribute name="vspace" type="Pixels"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="applet.children">
- <xs:choice>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:group ref="param.element.group" />
- <xs:group ref="block"></xs:group>
- <xs:group ref="form.element.group" />
- <xs:group ref="inline"></xs:group>
- <xs:group ref="misc"></xs:group>
- </xs:choice>
- </xs:choice>
- </xs:group>
-
- <xs:group name="param.element.group">
- <xs:choice>
- <xs:element ref="param"></xs:element>
- </xs:choice>
- </xs:group>
-
- <xs:complexType name="area.content">
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attributeGroup ref="focus"></xs:attributeGroup>
- <xs:attribute default="rect" name="shape" type="Shape"></xs:attribute>
- <xs:attribute name="coords" type="Coords"></xs:attribute>
- <xs:attribute name="href" type="URI"></xs:attribute>
- <xs:attribute name="nohref">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="nohref"></xs:enumeration>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression"></xs:restriction>
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
- <xs:attribute use="required" name="alt" type="Text"></xs:attribute>
- <xs:attribute name="target" type="FrameTarget"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:complexType name="base.content">
- <xs:attribute name="id" type="ID"></xs:attribute>
- <xs:attribute name="href" type="URI"></xs:attribute>
- <xs:attribute name="target" type="FrameTarget"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:complexType name="basefont.content">
- <xs:attribute name="id" type="ID" />
- <xs:attribute use="required" name="size" type="xs:anySimpleType" />
- <xs:attribute name="color" type="Color" />
- <xs:attribute name="face" type="xs:anySimpleType" />
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:complexType name="br.content">
- <xs:attributeGroup ref="coreattrs"></xs:attributeGroup>
- <xs:attribute default="none" name="clear">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="left"></xs:enumeration>
- <xs:enumeration value="all"></xs:enumeration>
- <xs:enumeration value="right"></xs:enumeration>
- <xs:enumeration value="none"></xs:enumeration>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression"></xs:restriction>
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:complexType name="col.content">
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attribute default="1" name="span" type="Number"></xs:attribute>
- <xs:attribute name="width" type="MultiLength"></xs:attribute>
- <xs:attributeGroup ref="cellhalign"></xs:attributeGroup>
- <xs:attributeGroup ref="cellvalign"></xs:attributeGroup>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:complexType name="colgroup.content">
- <xs:group ref="colgroup.children" />
- <xs:attributeGroup ref="attrs" />
- <xs:attribute default="1" name="span" type="Number" />
- <xs:attribute name="width" type="MultiLength" />
- <xs:attributeGroup ref="cellhalign" />
- <xs:attributeGroup ref="cellvalign" />
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:group name="colgroup.children">
- <xs:choice>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element maxOccurs="unbounded" minOccurs="0" ref="col" />
- <xs:group ref="cdk:structural" />
- </xs:choice>
- </xs:choice>
- </xs:group>
- <xs:complexType name="dir.content">
- <xs:group ref="dir.children" />
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attribute ref="compact"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:group name="dir.children">
- <xs:choice>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element maxOccurs="unbounded" minOccurs="0" ref="li" />
- <xs:group ref="cdk:structural" />
- </xs:choice>
- </xs:choice>
- </xs:group>
- <xs:complexType name="dl.content">
- <xs:group ref="dl.children" />
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attribute ref="compact"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="dl.children">
- <xs:choice>
- <xs:choice maxOccurs="unbounded">
- <xs:element ref="dt" />
- <xs:element ref="dd" />
- <xs:group ref="cdk:structural" />
- </xs:choice>
- </xs:choice>
- </xs:group>
-
- <xs:complexType name="fieldset.content" mixed="true">
- <xs:group ref="fieldset.children" />
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="fieldset.children">
- <xs:sequence>
- <xs:group ref="legend.element.group" />
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:group ref="block"></xs:group>
- <xs:group ref="form.element.group" />
- <xs:group ref="inline"></xs:group>
- <xs:group ref="misc"></xs:group>
- </xs:choice>
- </xs:sequence>
- </xs:group>
-
- <xs:group name="legend.element.group">
- <xs:choice>
- <xs:element ref="legend"></xs:element>
- </xs:choice>
- </xs:group>
-
- <xs:complexType name="head.content">
- <xs:group ref="head.children" />
- <xs:attributeGroup ref="i18n"></xs:attributeGroup>
- <xs:attribute name="id" type="ID"></xs:attribute>
- <xs:attribute name="profile" type="URI"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="head.children">
- <xs:sequence>
- <xs:group ref="head.misc" />
- <xs:choice>
- <xs:sequence minOccurs="0">
- <xs:element ref="title" />
- <xs:group ref="head.misc" />
- <xs:sequence minOccurs="0">
- <xs:element ref="base" />
- <xs:group ref="head.misc" />
- </xs:sequence>
- </xs:sequence>
- <xs:sequence minOccurs="0">
- <xs:element ref="base" />
- <xs:group ref="head.misc" />
- <xs:element ref="title" />
- <xs:group ref="head.misc" />
- </xs:sequence>
- </xs:choice>
- </xs:sequence>
- </xs:group>
-
- <xs:complexType name="hr.content">
- <xs:attributeGroup ref="attrs" />
- <xs:attribute name="align">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="left"></xs:enumeration>
- <xs:enumeration value="center"></xs:enumeration>
- <xs:enumeration value="right"></xs:enumeration>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression"></xs:restriction>
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
- <xs:attribute name="noshade">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="noshade"></xs:enumeration>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression"></xs:restriction>
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
- <xs:attribute name="size" type="Pixels"></xs:attribute>
- <xs:attribute name="width" type="Length"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:complexType name="html.content">
- <xs:group ref="html.children" />
- <xs:attributeGroup ref="i18n"></xs:attributeGroup>
- <xs:attribute name="id" type="ID"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:group name="html.children">
- <xs:sequence>
- <xs:element minOccurs="0" ref="head" />
- <xs:group maxOccurs="unbounded" minOccurs="0" ref="cdk:structural" />
- <xs:element minOccurs="0" ref="body" />
- </xs:sequence>
- </xs:group>
- <xs:complexType name="img.content">
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attribute use="required" name="src" type="URI"></xs:attribute>
- <xs:attribute use="required" name="alt" type="Text"></xs:attribute>
- <xs:attribute name="name" type="NMTOKEN"></xs:attribute>
- <xs:attribute name="longdesc" type="URI"></xs:attribute>
- <xs:attribute name="height" type="Length"></xs:attribute>
- <xs:attribute name="width" type="Length"></xs:attribute>
- <xs:attribute name="usemap" type="URI">
- <xs:annotation></xs:annotation>
- </xs:attribute>
- <xs:attribute name="ismap">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="ismap"></xs:enumeration>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression"></xs:restriction>
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
- <xs:attribute name="align" type="ImgAlign"></xs:attribute>
- <xs:attribute name="border" type="Length"></xs:attribute>
- <xs:attribute name="hspace" type="Pixels"></xs:attribute>
- <xs:attribute name="vspace" type="Pixels"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:complexType name="input.content">
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attributeGroup ref="focus"></xs:attributeGroup>
- <xs:attribute default="text" name="type" type="InputType"></xs:attribute>
- <xs:attribute name="name" type="xs:anySimpleType">
- <xs:annotation></xs:annotation>
- </xs:attribute>
- <xs:attribute name="value" type="xs:anySimpleType"></xs:attribute>
- <xs:attribute ref="checked"></xs:attribute>
- <xs:attribute ref="disabled"></xs:attribute>
- <xs:attribute ref="readonly"></xs:attribute>
- <xs:attribute name="size" type="xs:anySimpleType"></xs:attribute>
- <xs:attribute name="maxlength" type="Number"></xs:attribute>
- <xs:attribute name="src" type="URI"></xs:attribute>
- <xs:attribute name="alt" type="xs:anySimpleType"></xs:attribute>
- <xs:attribute name="usemap" type="URI"></xs:attribute>
- <xs:attribute name="onselect" type="Script"></xs:attribute>
- <xs:attribute name="onchange" type="Script"></xs:attribute>
- <xs:attribute name="accept" type="ContentTypes"></xs:attribute>
- <xs:attribute name="align" type="ImgAlign"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:complexType name="isindex.content">
- <xs:attributeGroup ref="coreattrs"></xs:attributeGroup>
- <xs:attributeGroup ref="i18n"></xs:attributeGroup>
- <xs:attribute name="prompt" type="Text"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:complexType name="link.content">
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attribute name="charset" type="Charset"></xs:attribute>
- <xs:attribute name="href" type="URI"></xs:attribute>
- <xs:attribute name="hreflang" type="LanguageCode"></xs:attribute>
- <xs:attribute name="type" type="ContentType"></xs:attribute>
- <xs:attribute name="rel" type="LinkTypes"></xs:attribute>
- <xs:attribute name="rev" type="LinkTypes"></xs:attribute>
- <xs:attribute name="media" type="MediaDesc"></xs:attribute>
- <xs:attribute name="target" type="FrameTarget"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:complexType name="map.content">
- <xs:group ref="map.children" />
- <xs:attributeGroup ref="i18n"></xs:attributeGroup>
- <xs:attributeGroup ref="events"></xs:attributeGroup>
- <xs:attribute use="required" name="id" type="ID"></xs:attribute>
- <xs:attribute name="class" type="xs:anySimpleType"></xs:attribute>
- <xs:attribute name="style" type="StyleSheet"></xs:attribute>
- <xs:attribute name="title" type="Text"></xs:attribute>
- <xs:attribute name="name" type="xs:anySimpleType"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="map.children">
- <xs:choice>
- <xs:choice maxOccurs="unbounded">
- <xs:group ref="block"></xs:group>
- <xs:group ref="form.element.group" />
- <xs:group ref="misc"></xs:group>
- </xs:choice>
- <xs:group ref="area.element.group" maxOccurs="unbounded" />
- </xs:choice>
- </xs:group>
-
- <xs:group name="area.element.group">
- <xs:choice>
- <xs:element ref="area" />
- </xs:choice>
- </xs:group>
-
- <xs:complexType name="menu.content">
- <xs:group ref="menu.children" />
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attribute ref="compact"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="menu.children">
- <xs:choice>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element maxOccurs="unbounded" minOccurs="0" ref="li" />
- <xs:group ref="cdk:structural" />
- </xs:choice>
- </xs:choice>
- </xs:group>
-
- <xs:complexType name="meta.content">
- <xs:attributeGroup ref="i18n"></xs:attributeGroup>
- <xs:attribute name="id" type="ID"></xs:attribute>
- <xs:attribute name="http-equiv" type="xs:anySimpleType"></xs:attribute>
- <xs:attribute name="name" type="xs:anySimpleType"></xs:attribute>
- <xs:attribute use="required" name="content" type="xs:anySimpleType">
- </xs:attribute>
- <xs:attribute name="scheme" type="xs:anySimpleType"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:complexType name="object.content" mixed="true">
- <xs:group ref="object.children" />
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attribute name="declare">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="declare"></xs:enumeration>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression"></xs:restriction>
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
- <xs:attribute name="classid" type="URI"></xs:attribute>
- <xs:attribute name="codebase" type="URI"></xs:attribute>
- <xs:attribute name="data" type="URI"></xs:attribute>
- <xs:attribute name="type" type="ContentType"></xs:attribute>
- <xs:attribute name="codetype" type="ContentType"></xs:attribute>
- <xs:attribute name="archive" type="UriList"></xs:attribute>
- <xs:attribute name="standby" type="Text"></xs:attribute>
- <xs:attribute name="height" type="Length"></xs:attribute>
- <xs:attribute name="width" type="Length"></xs:attribute>
- <xs:attribute name="usemap" type="URI"></xs:attribute>
- <xs:attribute name="name" type="NMTOKEN"></xs:attribute>
- <xs:attribute name="tabindex" type="Number"></xs:attribute>
- <xs:attribute name="align" type="ImgAlign"></xs:attribute>
- <xs:attribute name="border" type="Pixels"></xs:attribute>
- <xs:attribute name="hspace" type="Pixels"></xs:attribute>
- <xs:attribute name="vspace" type="Pixels"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="object.children">
- <xs:choice>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:group ref="object.children.elements" />
- <xs:group ref="block" />
- <xs:group ref="inline" />
- <xs:group ref="misc" />
- </xs:choice>
- </xs:choice>
- </xs:group>
-
- <xs:group name="object.children.elements">
- <xs:choice>
- <xs:element ref="param" />
- <xs:element ref="form" />
- </xs:choice>
- </xs:group>
-
- <xs:complexType name="ol.content">
- <xs:group ref="ol.children" />
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attribute name="type" type="OLStyle"></xs:attribute>
- <xs:attribute ref="compact"></xs:attribute>
- <xs:attribute name="start" type="Number"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="ol.children">
- <xs:choice>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element maxOccurs="unbounded" minOccurs="0" ref="li" />
- <xs:group ref="cdk:structural" />
- </xs:choice>
- </xs:choice>
- </xs:group>
-
- <xs:complexType name="optgroup.content">
- <xs:group ref="optgroup.children" />
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attribute ref="disabled"></xs:attribute>
- <xs:attribute use="required" name="label" type="Text"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="optgroup.children">
- <xs:sequence>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="option" />
- <xs:group ref="cdk:structural" />
- </xs:sequence>
- </xs:group>
-
- <xs:complexType name="option.content" mixed="true">
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attribute name="selected">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="selected"></xs:enumeration>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression"></xs:restriction>
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
- <xs:attribute ref="disabled"></xs:attribute>
- <xs:attribute name="label" type="Text"></xs:attribute>
- <xs:attribute name="value" type="xs:anySimpleType"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:complexType name="param.content">
- <xs:attribute name="id" type="ID"></xs:attribute>
- <xs:attribute use="required" name="name" type="xs:anySimpleType">
- </xs:attribute>
- <xs:attribute name="value" type="xs:anySimpleType"></xs:attribute>
- <xs:attribute default="data" name="valuetype">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="data"></xs:enumeration>
- <xs:enumeration value="ref"></xs:enumeration>
- <xs:enumeration value="object"></xs:enumeration>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression"></xs:restriction>
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
- <xs:attribute name="type" type="ContentType"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:complexType name="script.content" mixed="true">
- <xs:attribute name="id" type="ID"></xs:attribute>
- <xs:attribute name="charset" type="Charset"></xs:attribute>
- <xs:attribute use="required" name="type" type="ContentType"></xs:attribute>
- <xs:attribute name="language" type="xs:anySimpleType"></xs:attribute>
- <xs:attribute name="src" type="URI"></xs:attribute>
- <xs:attribute name="defer">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="defer"></xs:enumeration>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression"></xs:restriction>
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
- <xs:attribute fixed="preserve" ref="xml:space"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:complexType name="select.content">
- <xs:group ref="select.children" />
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attribute name="name" type="xs:anySimpleType"></xs:attribute>
- <xs:attribute name="size" type="Number"></xs:attribute>
- <xs:attribute name="multiple">
- <xs:simpleType>
- <xs:union>
- <xs:simpleType>
- <xs:restriction base="xs:token">
- <xs:enumeration value="multiple"></xs:enumeration>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType>
- <xs:restriction base="elOnlyExpression"></xs:restriction>
- </xs:simpleType>
- </xs:union>
- </xs:simpleType>
- </xs:attribute>
- <xs:attribute ref="disabled"></xs:attribute>
- <xs:attribute name="tabindex" type="tabindexNumber"></xs:attribute>
- <xs:attribute name="onfocus" type="Script"></xs:attribute>
- <xs:attribute name="onblur" type="Script"></xs:attribute>
- <xs:attribute name="onchange" type="Script"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="select.children">
- <xs:choice>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element ref="optgroup" />
- <xs:element ref="option" />
- <xs:group ref="cdk:structural" />
- </xs:choice>
- </xs:choice>
- </xs:group>
-
- <xs:complexType name="style.content" mixed="true">
- <xs:attributeGroup ref="i18n"></xs:attributeGroup>
- <xs:attribute name="id" type="ID"></xs:attribute>
- <xs:attribute use="required" name="type" type="ContentType"></xs:attribute>
- <xs:attribute name="media" type="MediaDesc"></xs:attribute>
- <xs:attribute name="title" type="Text"></xs:attribute>
- <xs:attribute fixed="preserve" ref="xml:space"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:complexType name="table.content">
- <xs:group ref="table.children" />
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attribute name="summary" type="Text"></xs:attribute>
- <xs:attribute name="width" type="Length"></xs:attribute>
- <xs:attribute name="border" type="Pixels"></xs:attribute>
- <xs:attribute name="frame" type="TFrame"></xs:attribute>
- <xs:attribute name="rules" type="TRules"></xs:attribute>
- <xs:attribute name="cellspacing" type="Length"></xs:attribute>
- <xs:attribute name="cellpadding" type="Length"></xs:attribute>
- <xs:attribute name="align" type="TAlign"></xs:attribute>
- <xs:attribute name="bgcolor" type="Color"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="table.children">
- <xs:sequence>
- <xs:element minOccurs="0" ref="caption" />
- <xs:choice>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="col" />
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="colgroup" />
- </xs:choice>
- <xs:element minOccurs="0" ref="thead" />
- <xs:element minOccurs="0" ref="tfoot" />
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:choice>
- <xs:group ref="cdk:structural" />
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="tbody" />
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="tr" />
- </xs:choice>
- </xs:choice>
- </xs:sequence>
- </xs:group>
-
- <xs:complexType name="tbody.content">
- <xs:group ref="tbody.children" />
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attributeGroup ref="cellhalign"></xs:attributeGroup>
- <xs:attributeGroup ref="cellvalign"></xs:attributeGroup>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="tbody.children">
- <xs:choice>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element maxOccurs="unbounded" minOccurs="0" ref="tr" />
- <xs:group ref="cdk:structural" />
- </xs:choice>
- </xs:choice>
- </xs:group>
-
- <xs:complexType name="textarea.content" mixed="true">
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attributeGroup ref="focus"></xs:attributeGroup>
- <xs:attribute name="name" type="xs:anySimpleType"></xs:attribute>
- <xs:attribute use="required" name="rows" type="Number"></xs:attribute>
- <xs:attribute use="required" name="cols" type="Number"></xs:attribute>
- <xs:attribute ref="disabled"></xs:attribute>
- <xs:attribute ref="readonly"></xs:attribute>
- <xs:attribute name="onselect" type="Script"></xs:attribute>
- <xs:attribute name="onchange" type="Script"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:complexType name="tfoot.content">
- <xs:group ref="tfoot.children" />
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attributeGroup ref="cellhalign"></xs:attributeGroup>
- <xs:attributeGroup ref="cellvalign"></xs:attributeGroup>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:group name="tfoot.children">
- <xs:choice>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element maxOccurs="unbounded" minOccurs="0" ref="tr" />
- <xs:group ref="cdk:structural" />
- </xs:choice>
- </xs:choice>
- </xs:group>
- <xs:complexType name="thead.content">
- <xs:group ref="thead.children" />
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attributeGroup ref="cellhalign"></xs:attributeGroup>
- <xs:attributeGroup ref="cellvalign"></xs:attributeGroup>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
- <xs:group name="thead.children">
- <xs:choice>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element maxOccurs="unbounded" minOccurs="0" ref="tr" />
- <xs:group ref="cdk:structural" />
- </xs:choice>
- </xs:choice>
- </xs:group>
- <xs:complexType name="title.content" mixed="true">
- <xs:attributeGroup ref="i18n"></xs:attributeGroup>
- <xs:attribute name="id" type="ID"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:complexType name="tr.content">
- <xs:group ref="tr.children" />
- <xs:attributeGroup ref="attrs"></xs:attributeGroup>
- <xs:attributeGroup ref="cellhalign"></xs:attributeGroup>
- <xs:attributeGroup ref="cellvalign"></xs:attributeGroup>
- <xs:attribute name="bgcolor" type="Color"></xs:attribute>
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="tr.children">
- <xs:choice>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element maxOccurs="unbounded" minOccurs="0" ref="th" />
- <xs:element maxOccurs="unbounded" minOccurs="0" ref="td" />
- <xs:group ref="cdk:structural" />
- </xs:choice>
- </xs:choice>
- </xs:group>
-
- <xs:complexType name="ul.content">
- <xs:group ref="ul.children" />
- <xs:attributeGroup ref="attrs" />
- <xs:attribute name="type" type="ULStyle" />
- <xs:attribute ref="compact" />
- <xs:attributeGroup ref="cdk:core.attrs" />
- </xs:complexType>
-
- <xs:group name="ul.children">
- <xs:choice>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element maxOccurs="unbounded" minOccurs="0" ref="li" />
- <xs:group ref="cdk:structural" />
- </xs:choice>
- </xs:choice>
- </xs:group>
-</xs:schema>
15 years, 4 months
JBoss Rich Faces SVN: r15156 - in branches/community/3.3.X/docs/userguide/en/src/main/docbook: modules and 1 other directory.
by richfaces-svn-commits@lists.jboss.org
Author: smukhina
Date: 2009-08-11 08:13:51 -0400 (Tue, 11 Aug 2009)
New Revision: 15156
Modified:
branches/community/3.3.X/docs/userguide/en/src/main/docbook/master.xml
branches/community/3.3.X/docs/userguide/en/src/main/docbook/modules/RFCidesupport.xml
branches/community/3.3.X/docs/userguide/en/src/main/docbook/modules/RFClinks.xml
Log:
https://jira.jboss.org/jira/browse/JBDS-670 - links are fixed
Modified: branches/community/3.3.X/docs/userguide/en/src/main/docbook/master.xml
===================================================================
--- branches/community/3.3.X/docs/userguide/en/src/main/docbook/master.xml 2009-08-11 11:16:31 UTC (rev 15155)
+++ branches/community/3.3.X/docs/userguide/en/src/main/docbook/master.xml 2009-08-11 12:13:51 UTC (rev 15156)
@@ -159,7 +159,7 @@
<abstract>
<title/>
<para>
- <ulink url="../pdf/richfaces_usersguide.pdf">PDF version</ulink>
+ <ulink url="../pdf/richfaces_reference.pdf"">PDF version</ulink>
</para>
</abstract>
<!--citebiblioid>
Modified: branches/community/3.3.X/docs/userguide/en/src/main/docbook/modules/RFCidesupport.xml
===================================================================
--- branches/community/3.3.X/docs/userguide/en/src/main/docbook/modules/RFCidesupport.xml 2009-08-11 11:16:31 UTC (rev 15155)
+++ branches/community/3.3.X/docs/userguide/en/src/main/docbook/modules/RFCidesupport.xml 2009-08-11 12:13:51 UTC (rev 15156)
@@ -17,7 +17,7 @@
<para>
RichFaces support is implemented in
<ulink url="http://www.redhat.com/developers/rhds/index.html">JBoss Developer Studio 1.0.0 GA</ulink> and in
- <ulink url="http://www.jboss.org/tools/index.html">Jboss Tools</ulink>. JBoss Developer Studio is a fully packaged
+ <ulink url="http://jboss.org/tools">Jboss Tools</ulink>. JBoss Developer Studio is a fully packaged
<property>IDE</property> that provides full support for Java Server Faces, RichFaces, Facelets, Struts and other Web technologies.
In addition to this, it seamlessly combines visual and source-oriented development approaches.
One of the special support feature for RichFaces is that it is available as project "capabilitiy"
Modified: branches/community/3.3.X/docs/userguide/en/src/main/docbook/modules/RFClinks.xml
===================================================================
--- branches/community/3.3.X/docs/userguide/en/src/main/docbook/modules/RFClinks.xml 2009-08-11 11:16:31 UTC (rev 15155)
+++ branches/community/3.3.X/docs/userguide/en/src/main/docbook/modules/RFClinks.xml 2009-08-11 12:13:51 UTC (rev 15156)
@@ -35,7 +35,7 @@
<row>
<entry>RichFaces Blog</entry>
<entry>
- <ulink url="http://jroller.com/page/a4j">RichFaces Blog</ulink>
+ <ulink url="http://jroller.com/a4j/">RichFaces Blog</ulink>
</entry>
</row>
</tbody>
15 years, 4 months