html5.flow.class |= html5.forms.flow.class html5.phrasing.class |= html5.forms.phrasing.class html5.forms.flow.class |= html5.form | html5.fieldset html5.forms.phrasing.class |= html5.meter | html5.input.class | html5.textarea | html5.label | html5.button.class | html5.select | html5.output | html5.datalist | html5.keygen html5.input.class |= html5.input.text | html5.input.password | html5.input.checkbox | html5.input.radio | html5.input.button | html5.input.submit | html5.input.reset | html5.input.file | html5.input.hidden | html5.input.image | html5.input.datetime | html5.input.datetime-local | html5.input.date | html5.input.month | html5.input.time | html5.input.week | html5.input.number | html5.input.range | html5.input.email | html5.input.url | html5.input.search | html5.input.tel | html5.input.color html5.button.class |= html5.button.submit | html5.button.reset | html5.button.button html5.form = element form { html5.form.attlist & html5.form.content } html5.form.attlist &= html5.global.attrs & html5.form.action.attr? & html5.form.method.attr? & html5.form.enctype.attr? & html5.forms.name.attr? & html5.form.accept-charset.attr? & html5.form.novalidate.attr? & html5.form.target.attr? & html5.form.autocomplete.attr? html5.form.action.attr = attribute action { datatype.html5.URL.spaces } html5.form.method.attr = attribute method { html5.form.method.attr.value } html5.form.method.attr.value = ( 'get' | 'post' ) html5.form.enctype.attr = attribute enctype { html5.form.enctype.attr.value } html5.form.enctype.attr.value = ( 'application/x-www-form-urlencoded' | 'multipart/form-data' | 'text/plain' ) html5.form.accept-charset.attr = attribute accept-charset { datatype.html5.forms.charsetlist} html5.form.novalidate.attr = attribute novalidate { 'novalidate' | '' } html5.form.target.attr = attribute target { datatype.html5.browsing.context.name.or.keyword } html5.form.autocomplete.attr = attribute autocomplete { 'on' | 'off' } html5.form.content = html5.flow.model html5.input.text = element input { html5.input.text.attlist } html5.input.text.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'text' }? & html5.forms.maxlength.attr? & html5.forms.readonly.attr? & html5.forms.size.attr? & html5.input.text.value.attr? & html5.input.autocomplete.attr? & html5.forms.autofocus.attr? & html5.input.list.attr? & html5.forms.pattern.attr? & html5.forms.required.attr? & html5.forms.placeholder.attr? & html5.input.common.attrs html5.input.text.value.attr = attribute value { datatype.html5.forms.string.nolinebreaks } html5.input.password = element input { html5.input.password.attlist } html5.input.password.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'password' } & html5.forms.maxlength.attr? & html5.forms.readonly.attr? & html5.forms.size.attr? & html5.input.password.value.attr? & html5.input.autocomplete.attr? & html5.forms.autofocus.attr? & html5.forms.pattern.attr? & html5.forms.required.attr? & html5.forms.placeholder.attr? & html5.input.common.attrs html5.input.password.value.attr = attribute value { datatype.html5.forms.string.nolinebreaks } html5.input.checkbox = element input { html5.input.checkbox.attlist } html5.input.checkbox.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'checkbox' } & html5.input.checked.attr? & html5.input.checkbox.value.attr? & html5.forms.autofocus.attr? & html5.forms.required.attr? & html5.input.common.attrs html5.input.checkbox.value.attr = attribute value { datatype.string } html5.input.radio = element input { html5.input.radio.attlist } html5.input.radio.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'radio' } & html5.input.checked.attr? & html5.input.radio.value.attr? & html5.forms.autofocus.attr? & html5.forms.required.attr? & html5.input.common.attrs html5.input.radio.value.attr = attribute value { datatype.string } html5.input.button = element input { html5.input.button.attlist } html5.input.button.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'button' } & html5.input.button.value.attr? & html5.forms.autofocus.attr? & html5.input.common.attrs html5.input.button.value.attr = attribute value { datatype.string } html5.input.submit = element input { html5.input.submit.attlist } html5.input.submit.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'submit' } & html5.input.submit.value.attr? & html5.forms.formaction.attr? & html5.forms.autofocus.attr? & html5.forms.formenctype.attr? & html5.forms.formmethod.attr? & html5.forms.formtarget.attr? & html5.forms.formnovalidate.attr? & html5.input.common.attrs html5.input.submit.value.attr = attribute value { datatype.string } html5.input.reset = element input { html5.input.reset.attlist } html5.input.reset.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'reset' } & html5.input.reset.value.attr? & html5.forms.autofocus.attr? & html5.input.common.attrs html5.input.reset.value.attr = attribute value { datatype.string } html5.input.file = element input { html5.input.file.attlist } html5.input.file.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'file'} & html5.input.file.accept.attr? & html5.forms.autofocus.attr? & html5.forms.required.attr? & html5.input.multiple.attr? & html5.input.common.attrs html5.input.file.accept.attr = attribute accept { datatype.html5.forms.mimetypelist } html5.input.hidden = element input { html5.input.hidden.attlist } html5.input.hidden.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'hidden' } & html5.input.hidden.value.attr? & html5.input.common.attrs html5.input.hidden.value.attr = attribute value { datatype.string } html5.input.image = element input { html5.input.image.attlist } html5.input.image.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'image' } & html5.alt.attr & html5.src.attr & html5.forms.formaction.attr? & html5.forms.autofocus.attr? & html5.forms.formenctype.attr? & html5.forms.formmethod.attr? & html5.forms.formtarget.attr? & html5.forms.formnovalidate.attr? & html5.dimension.attrs? & html5.input.common.attrs html5.input.datetime = element input { html5.input.datetime.attlist } html5.input.datetime.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'datetime'} & html5.input.autocomplete.attr? & html5.forms.autofocus.attr? & html5.input.list.attr? & html5.input.datetime.min.attr? & html5.input.datetime.max.attr? & html5.input.step.float.attr? & html5.forms.readonly.attr? & html5.forms.required.attr? & html5.input.datetime.value.attr? & html5.input.common.attrs html5.input.datetime.min.attr = attribute min { datatype.html5.datetime } html5.input.datetime.max.attr = attribute max { datatype.html5.datetime } html5.input.datetime.value.attr = attribute value { datatype.html5.datetime } html5.input.datetime-local = element input { html5.input.datetime-local.attlist } html5.input.datetime-local.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'datetime-local' } & html5.input.autocomplete.attr? & html5.forms.autofocus.attr? & html5.input.list.attr? & html5.input.datetime-local.min.attr? & html5.input.datetime-local.max.attr? & html5.input.step.float.attr? & html5.forms.readonly.attr? & html5.forms.required.attr? & html5.input.datetime-local.value.attr? & html5.input.common.attrs html5.input.datetime-local.min.attr = attribute min { datatype.html5.datetime.local } html5.input.datetime-local.max.attr = attribute max { datatype.html5.datetime.local } html5.input.datetime-local.value.attr = attribute value { datatype.html5.datetime.local } html5.input.date = element input { html5.input.date.attlist } html5.input.date.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'date' } & html5.input.autocomplete.attr? & html5.forms.autofocus.attr? & html5.input.list.attr? & html5.input.date.min.attr? & html5.input.date.max.attr? & html5.input.step.integer.attr? & html5.forms.readonly.attr? & html5.forms.required.attr? & html5.input.date.value.attr? & html5.input.common.attrs html5.input.date.min.attr = attribute min { datatype.html5.date } html5.input.date.max.attr = attribute max { datatype.html5.date } html5.input.date.value.attr = attribute value { datatype.html5.date } html5.input.month = element input { html5.input.month.attlist } html5.input.month.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'month' } & html5.input.autocomplete.attr? & html5.forms.autofocus.attr? & html5.input.list.attr? & html5.input.month.min.attr? & html5.input.month.max.attr? & html5.input.step.integer.attr? & html5.forms.readonly.attr? & html5.forms.required.attr? & html5.input.month.value.attr? & html5.input.common.attrs html5.input.month.min.attr = attribute min { datatype.html5.month } html5.input.month.max.attr = attribute max { datatype.html5.month } html5.input.month.value.attr = attribute value { datatype.html5.month } html5.input.time = element input { html5.input.time.attlist } html5.input.time.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'time' } & html5.input.autocomplete.attr? & html5.forms.autofocus.attr? & html5.input.list.attr? & html5.input.time.min.attr? & html5.input.time.max.attr? & html5.input.step.float.attr? & html5.forms.readonly.attr? & html5.forms.required.attr? & html5.input.time.value.attr? & html5.input.common.attrs html5.input.time.min.attr = attribute min { datatype.html5.time } html5.input.time.max.attr = attribute max { datatype.html5.time } html5.input.time.value.attr = attribute value { datatype.html5.time } html5.input.week = element input { html5.input.week.attlist } html5.input.week.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'week' } & html5.input.autocomplete.attr? & html5.forms.autofocus.attr? & html5.input.list.attr? & html5.input.week.min.attr? & html5.input.week.max.attr? & html5.input.step.integer.attr? & html5.forms.readonly.attr? & html5.forms.required.attr? & html5.input.week.value.attr? & html5.input.common.attrs html5.input.week.min.attr = attribute min { datatype.html5.week } html5.input.week.max.attr = attribute max { datatype.html5.week } html5.input.week.value.attr = attribute value { datatype.html5.week } html5.input.number = element input { input.number.attlist } input.number.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'number' } & html5.input.autocomplete.attr? & html5.forms.autofocus.attr? & html5.input.list.attr? & html5.input.number.min.attr? & html5.input.number.max.attr? & html5.input.step.float.attr? & html5.forms.readonly.attr? & html5.forms.required.attr? & html5.input.number.value.attr? & html5.input.common.attrs html5.input.number.min.attr = attribute min { datatype.float } html5.input.number.max.attr = attribute max { datatype.float } html5.input.number.value.attr = attribute value { datatype.float } html5.input.range = element input { html5.input.range.attlist } html5.input.range.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'range' } & html5.input.autocomplete.attr? & html5.forms.autofocus.attr? & html5.input.list.attr? & html5.input.range.min.attr? & html5.input.range.max.attr? & html5.input.step.float.attr? & html5.input.range.value.attr? & html5.input.common.attrs html5.input.range.min.attr = attribute min { datatype.float } html5.input.range.max.attr = attribute max { datatype.float } html5.input.range.value.attr = attribute value { datatype.float } html5.input.email = element input { html5.input.email.attlist } html5.input.email.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'email' } & html5.input.autocomplete.attr? & html5.forms.autofocus.attr? & html5.input.list.attr? & html5.forms.maxlength.attr? & html5.forms.pattern.attr? & html5.forms.readonly.attr? & html5.forms.required.attr? & html5.forms.size.attr? & html5.forms.placeholder.attr? & ((html5.input.multiple.attr & html5.input.email.value.multiple.attr?) | html5.input.email.value.single.attr? )? & html5.input.common.attrs html5.input.email.value.single.attr = attribute value { datatype.html5.emailaddress } html5.input.email.value.multiple.attr = attribute value { datatype.html5.emailaddresslist } html5.input.url = element input { html5.input.url.attlist } html5.input.url.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'url' } & html5.input.autocomplete.attr? & html5.forms.autofocus.attr? & html5.input.list.attr? & html5.forms.maxlength.attr? & html5.forms.pattern.attr? & html5.forms.readonly.attr? & html5.forms.required.attr? & html5.forms.size.attr? & html5.forms.placeholder.attr? & html5.input.url.value.attr? & html5.input.common.attrs html5.input.url.value.attr = attribute value { '' | datatype.URI.absolute } html5.input.search = element input { html5.input.search.attlist } html5.input.search.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'search' } & html5.input.autocomplete.attr? & html5.forms.autofocus.attr? & html5.input.list.attr? & html5.forms.maxlength.attr? & html5.forms.pattern.attr? & html5.forms.readonly.attr? & html5.forms.required.attr? & html5.forms.size.attr? & html5.forms.placeholder.attr? & html5.input.search.value.attr? & html5.input.common.attrs html5.input.search.value.attr = attribute value { datatype.html5.forms.string.nolinebreaks } html5.input.tel = element input { html5.input.tel.attlist } html5.input.tel.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'tel' } & html5.input.autocomplete.attr? & html5.forms.autofocus.attr? & html5.input.list.attr? & html5.forms.maxlength.attr? & html5.forms.pattern.attr? & html5.forms.readonly.attr? & html5.forms.required.attr? & html5.forms.size.attr? & html5.forms.placeholder.attr? & html5.input.tel.value.attr? & html5.input.common.attrs html5.input.tel.value.attr = attribute value { datatype.string } html5.input.color = element input { html5.input.color.attlist } html5.input.color.attlist = html5.global.attrs & html5.forms.common.attrs & attribute type { 'color' } & html5.input.autocomplete.attr? & html5.forms.autofocus.attr? & html5.input.list.attr? & html5.input.color.value.attr? & html5.input.common.attrs html5.input.color.value.attr = attribute value { datatype.html5.color } html5.textarea = element textarea { html5.textarea.attlist & html5.textarea.content } html5.textarea.attlist = html5.global.attrs & html5.forms.common.attrs & html5.forms.readonly.attr? & html5.forms.maxlength.attr? & html5.forms.autofocus.attr? & html5.forms.required.attr? & html5.forms.placeholder.attr? & html5.textarea.rows.attr? & ((html5.textarea.wrap.hard.attr? & html5.textarea.cols.attr)| (html5.textarea.wrap.soft.attr? & html5.textarea.cols.attr?)) & html5.forms.dirname.attr? html5.textarea.cols.attr = attribute cols { datatype.positive.integer } html5.textarea.rows.attr = attribute rows { datatype.positive.integer } html5.textarea.wrap.hard.attr = attribute wrap { 'hard' } html5.textarea.wrap.soft.attr = attribute wrap { 'soft' } html5.textarea.content = datatype.text html5.option = element option { html5.option.attlist & html5.option.content } html5.option.attlist = html5.global.attrs & html5.forms.disabled.attr? & html5.option.selected.attr? & html5.option.label.attr? & html5.option.value.attr? html5.option.selected.attr = attribute selected { 'selected' | '' } html5.option.label.attr = attribute label { datatype.string } html5.option.value.attr = attribute value { datatype.string } html5.option.content = datatype.text html5.optgroup = element optgroup { html5.optgroup.attlist & html5.optgroup.content } html5.optgroup.attlist = html5.global.attrs & html5.optgroup.label.attr & html5.forms.disabled.attr? html5.optgroup.label.attr = attribute label { datatype.string } html5.optgroup.content = html5.option* html5.select = element select { html5.select.attlist & html5.select.content } html5.select.attlist = html5.global.attrs & html5.forms.common.attrs & html5.select.size.attr? & html5.select.multiple.attr? & html5.forms.autofocus.attr? & html5.forms.required.attr? html5.select.size.attr = attribute size { datatype.positive.integer } html5.select.multiple.attr = attribute multiple { 'multiple' | '' } html5.select.content = html5.optgroup* & html5.option* html5.button.submit = element button { html5.button.submit.attlist & html5.button.content } html5.button.submit.attlist = html5.global.attrs & html5.forms.common.attrs & html5.button.submit.type.attr? & html5.button.value.attr? & html5.forms.formaction.attr? & html5.forms.autofocus.attr? & html5.forms.formenctype.attr? & html5.forms.formmethod.attr? & html5.forms.formtarget.attr? & html5.forms.formnovalidate.attr? html5.button.submit.type.attr = attribute type { 'submit' } html5.button.reset = element button { html5.button.reset.attlist & html5.button.content } html5.button.reset.attlist = html5.global.attrs & html5.forms.common.attrs & html5.button.reset.type.attr & html5.button.value.attr? & html5.forms.autofocus.attr? html5.button.reset.type.attr = attribute type { 'reset' } html5.button.button = element button { html5.button.button.attlist & html5.button.content } html5.button.button.attlist = html5.global.attrs & html5.forms.common.attrs & html5.button.button.type.attr & html5.button.value.attr? & html5.forms.autofocus.attr? html5.button.button.type.attr = attribute type { 'button' } html5.button.value.attr = attribute value { datatype.string } html5.button.content = html5.phrasing.model html5.fieldset = element fieldset { html5.fieldset.attlist & html5.fieldset.content } html5.fieldset.attlist = html5.global.attrs & html5.forms.common.attrs html5.fieldset.content = html5.legend?, html5.flow.model html5.legend = element legend { html5.legend.attlist & html5.legend.content } html5.legend.attlist = html5.global.attrs html5.legend.content = html5.phrasing.model html5.label = element label { html5.label.attlist & html5.label.content } html5.label.attlist = html5.global.attrs & html5.label.for.attr? & html5.forms.form.attr? html5.label.for.attr = attribute for { datatype.IDREF } html5.label.content = html5.phrasing.model html5.meter = element meter { html5.meter.attlist & html5.meter.content } html5.meter.attlist = html5.global.attrs & html5.meter.value.attr & html5.meter.min.attr? & html5.meter.low.attr? & html5.meter.high.attr? & html5.meter.max.attr? & html5.meter.optimum.attr? html5.meter.value.attr = attribute value { datatype.float } html5.meter.min.attr = attribute min { datatype.float } html5.meter.low.attr = attribute low { datatype.float } html5.meter.high.attr = attribute high { datatype.float } html5.meter.max.attr = attribute max { datatype.float } html5.meter.optimum.attr = attribute optimum { datatype.float } html5.meter.content = html5.phrasing.model html5.output = element output { html5.output.attlist & html5.output.content } html5.output.attlist = html5.global.attrs & html5.forms.name.attr? & html5.forms.form.attr? & html5.output.for.attr? html5.output.for.attr = attribute for { datatype.IDREFS } html5.output.content = html5.phrasing.model html5.datalist = element datalist { html5.datalist.attlist & html5.datalist.content } html5.datalist.attlist = html5.global.attrs html5.datalist.content = html5.option* & html5.phrasing.model html5.keygen = element keygen { html5.keygen.attlist } html5.keygen.attlist = html5.global.attrs & html5.keygen.challenge.attr? & html5.keygen.keytype.attr? & html5.forms.autofocus.attr? & html5.forms.common.attrs? html5.keygen.challenge.attr = attribute challenge { datatype.string } html5.keygen.keytype.attr = attribute keytype { 'rsa' } html5.input.common.attrs = html5.forms.dirname.attr? html5.input.checked.attr = attribute checked { 'checked' | '' } html5.input.autocomplete.attr = attribute autocomplete { 'on' | 'off'} html5.input.list.attr = attribute list { datatype.IDREF } html5.input.step.float.attr = attribute step { 'any' | datatype.float.positive } html5.input.step.integer.attr = attribute step { 'any' | datatype.positive.integer } html5.input.multiple.attr = attribute multiple { 'multiple' | '' } html5.forms.common.attrs = html5.forms.name.attr? & html5.forms.disabled.attr? & html5.forms.form.attr? html5.forms.name.attr = attribute name { datatype.string } html5.forms.disabled.attr = attribute disabled { 'disabled' | '' } html5.forms.form.attr = attribute form { datatype.IDREF } html5.forms.readonly.attr = attribute readonly { 'readonly' | '' } html5.forms.maxlength.attr = attribute maxlength { datatype.non-negative.integer } html5.forms.size.attr = attribute size { datatype.positive.integer } html5.forms.formaction.attr = attribute formaction { datatype.html5.URL.spaces } html5.forms.formenctype.attr = attribute formenctype { html5.forms.formenctype.attr.value } html5.forms.formenctype.attr.value = ( 'application/x-www-form-urlencoded' | 'multipart/form-data'| 'text/plain' ) html5.forms.formmethod.attr = attribute formmethod { html5.forms.formmethod.attr.value } html5.forms.formmethod.attr.value = ( 'get'| 'post') html5.forms.formtarget.attr = attribute formtarget { datatype.html5.browsing.context.name.or.keyword } html5.forms.formnovalidate.attr = attribute formnovalidate { 'formnovalidate' | '' } html5.forms.autofocus.attr = attribute autofocus { 'autofocus' | '' } html5.forms.pattern.attr = attribute pattern { datatype.html5.forms.pattern } html5.forms.template.attr = attribute template { datatype.IDREF } html5.forms.required.attr = attribute required { 'required' | '' } html5.forms.placeholder.attr = attribute placeholder { datatype.html5.forms.string.nolinebreaks } html5.forms.dirname.attr = attribute dirname { datatype.string }