# HTML5 markup definitions
# 
# This template defines valid tags and attributes for HTML5, using similar structure you can create markup for other *ML as well,
# such as XML, SVG, etc. Note, there are tags and attributes that are valid HTML, but are not included in this document since 
# their support was dropped in HTML5. If you want to use them, I suggest creating a new file for HTML4. This is a strict HTML5
# markup, use 'markup/html' for more lax HTML markup. This grammar uses <*> for intermediate nodes, that's not a requirement, a 
# regular tag node does not need to be a leaf node, but this makes the attribute grouping less confusing.
# 
# Rules:
#	- each line has to follow the following format (where whitespace can be spaces or tabs):
#		<tagname>	allowedattr1, allowedattr2, ...
#		example:	<canvas>	height, width
#	- indentation is used to define child nodes, child nodes inherit allowed attributes from their parents
#		example:
#			<col>	span
#				<colgroup>
#	#	- marks beginning of a comment
#		example:	# this is a comment
#	\	- when used at the end of the line, concatenates next line with current line, removing leading whitespace from next line
#		example:
#			<*>		attr1, attr2, attr3, \
#					attr4, attr5
#	<.>	- marks an internal node/tag, this node can't be used directly, but passes a set of usable attributes to its child tags,
#		this should not be a leaf node.
#		example:	<.>	disabled, form, name
#						<input>
#						<button>
#	*	- if used instead of attributes, removes any argument restrictions from this tag
#		example:	<a>	*
#	+	- force this element to never use shorthand close: <div> allows <div />, <div>+ always forces <div></div>
#		example:	<canvas>+
#	-	- force this element to never use close tag, note that adding children under this element in your .pyml file will trigger an error
#		example:	<!DOCTYPE>-
#	- you can repeat the same tag multiple times, this is typically useful when it reuses same attributes as multiple other tags,
#	yet those other tags don't share attributes. Note that when using + or - tag modifiers, the first occurence of the tag will be used
#	for deciding the element/tag modifier. The rest will be ignored.
#		example:
#			<canvas>	height, width
#				<input>	alt, src
#			<button>	disabled, type, value
#				<input>
#	<*>	- a special tag, its presence means that omitted tags are allowed in pyml as well (and will automatically be inferred to
#		use <tag></tag> format. Without this tag, RapydML will complain about any tags not specifically mentioned in the markup
#		file.
#		example:	<*> attr1, attr2	# allows any element name as long as only attr1 or attr2 attributes are used

<!doctype>-	*
<!DOCTYPE>- *
# global attributes
<.>	accesskey, class, contenteditable, contextmenu, dir, draggable, dropzone, hidden, id, lang, spellcheck, style, tabindex, title
	# global event attributes
	<.>	onblur, onchange, oncontextmenu, onfocus, onformchange, onforminput, oninput, oninvalid, onselect, onsubmit, \
		onkeydown, onkeypress, onkeyup, \
		onclick, ondblclick, ondrag, ondragend, ondragenter, ondragleave, ondragover, ondragstart, ondrop, onmousedown, \
		onmousemove, onmouseout, onmouseover, onmouseup, onmousewheel, onscroll, \
		onabort, oncanplay, oncanplaythrough, ondurationchange, onemptied, onended, onerror, onloadeddata, onloadedmetadata, \
		onloadstart, onpause, onplay, onplaying, onprogress, onratechange, \
		onreadystatechange, onseeked, onseeking, onstalled, onsuspend, ontimeupdate, onvolumechange, onwaiting
		<.> media, type
			<.>	href, hreflang, rel, target
				<a>+
				<area>	alt, coords, shape
				<link>	sizes
			<source>	src
			<style>		scoped
		<abbr>
		<address>
		<article>
		<aside>
		<.>	autoplay, controls, loop, preload, src
			<audio>
			<video>		muted, poster
		<b>
		<bdi>
		<bdo>			dir
		<blockquote>	cite
		<body>	onafterprint, onbeforeprtint, onbeforeunload, onerror, onhaschange, onload, onmessage, onoffline, ononline, \
				onpagehide, onpageshow, onpopstate, onredo, onresize, onstorage, onundo, onunload
		<br>
		<.>	disabled, form, name
			<.>	autofocus
				<keygen>		challenge, keytype
				<select>		multiple, size
				<.>	formaction, formenctype, formmethod, formnovalidate, formtarget, type, value
					<button>
					<input>		accept, alt, autocomplete, checked, list, multiple, pattern, size, step
				<.>	maxlength, placeholder, readonly, required
					<input>
					<textarea>+	cols, rows, wrap
			<fieldset>
		<.>	height, width
			<canvas>+
			<.>	src
				<embed>		type
				<iframe>+	name, sandbox, seamless, srcdoc
				<img>		alt, crossorigin, ismap, usemap
				<input>
			<object>	data, form, name, type, usemap
			<video>
		<caption>
		<cite>
		<code>
		<.>	span
			<col>
			<colgroup>
		<.>	disabled, label
			<command>	checked, icon, radiogroup, type
			<optgroup>
			<option>	selected, value
		<datalist>
		<dd>
		<.>	cite
			<.>	datetime
				<del>
				<ins>
			<q>
		<details>	open
		<dfn>
		<div>+
		<dl>
		<dt>
		<em>
		<figcaption>
		<figure>
		<footer>
		<form>		accept-charset, action, autocomplete, enctype, method, name, novalidate, target
		<h1>
		<h2>
		<h3>
		<h4>
		<h5>
		<h6>
		<header>
		<hgroup>
		<hr>
		<i>
		<.>	max, min
			<input>
			<meter>	form, high, low, optimum, value
		<kbd>
		<.>	for, form
			<label>
			<output>	name
		<legend>
		<li>		value
		<map>		name
		<mark>
		<menu>		label, type
		<nav>
		<ol>		reversed, start, type
		<p>
		<param>		name, value
		<pre>
		<progress>	max, value
		<rp>
		<rt>
		<ruby>
		<s>
		<samp>
		<script>+	async, charset, defer, src, type
		<section>
		<small>
		<span>
		<strong>
		<sub>
		<summary>
		<sup>
		<table>		border
		<tbody>
		<.>	colspan, headers, rowspan
			<td>
			<th>	scope
		<tfoot>
		<thead>
		<time>		datetime, pubdate
		<tr>
		<track>		default, kind, label, src, srclang
		<u>
		<ul>+
		<var>
		<wbr>
	<base>	href, target
	<head>
	<html>	manifest
	<meta>	charset, content, http-equiv, name
	<noscript>
	<title>
