datatypes w = "http://whattf.org/datatype-draft"

# #####################################################################
##  RELAX NG Schema for HTML 5: Phrase Markup                         #
# #####################################################################

## Contextual Hyperlink: <a>

	a.elem.phrasing =
		element a { a.inner.phrasing & a.attrs }
	a.elem.flow =
		element a { a.inner.flow & a.attrs }
	a.attrs =
		(	common.attrs.basic
		&	common.attrs.i18n
		&	common.attrs.present
		&	common.attrs.other
		&	a.attrs.name?
		&	shared-hyperlink.attrs.download?
		&	shared-hyperlink.attrs.href?
		&	shared-hyperlink.attrs.target?
		&	shared-hyperlink.attrs.rel?
		&	shared-hyperlink.attrs.hreflang?
		&	shared-hyperlink.attrs.type?
		&	shared-hyperlink.attrs.ping?
		&	(	common.attrs.aria.implicit.link
			|	common.attrs.aria.role.button
			|	common.attrs.aria.role.checkbox
			|	common.attrs.aria.role.link
			|	common.attrs.aria.role.menuitem
			|	common.attrs.aria.role.menuitemcheckbox
			|	common.attrs.aria.role.menuitemradio
			|	common.attrs.aria.role.tab
			|	common.attrs.aria.role.treeitem
			)?
		)
		a.attrs.name =
		  attribute name {
		    common.data.id # XXX not what the spec says
		  }
	a.inner.phrasing =
		( common.inner.phrasing )
	a.inner.flow =
		( common.inner.transparent.flow )

	common.elem.phrasing |= a.elem.phrasing
	common.elem.flow |= a.elem.flow

## Shared hyperlink attributes

  shared-hyperlink.attrs.download =
    attribute download {
      string
    }
  shared-hyperlink.attrs.href =
    attribute href {
      common.data.uri
    }
  shared-hyperlink.attrs.target =
    attribute target {
      common.data.browsing-context-or-keyword
    }
  shared-hyperlink.attrs.rel =
    attribute rel {
      w:a-rel
    }
  shared-hyperlink.attrs.hreflang =
    attribute hreflang {
      common.data.langcode
    }
  shared-hyperlink.attrs.media =
    attribute media {
      common.data.mediaquery
    }
  shared-hyperlink.attrs.type =
    attribute type {
      common.data.mimetype
    }

## Emphatic Stress: <em>

	em.elem =
		element em { em.inner & em.attrs }
	em.attrs =
		(	common.attrs
		&	common.attrs.aria?
		)
	em.inner =
		( common.inner.phrasing )

	common.elem.phrasing |= em.elem

## Strong Importance: <strong>

	strong.elem =
		element strong { strong.inner & strong.attrs }
	strong.attrs =
		(	common.attrs
		&	common.attrs.aria?
		)
	strong.inner =
		( common.inner.phrasing )

	common.elem.phrasing |= strong.elem

## Small Print and Side Comments: <small>

	small.elem =
		element small { small.inner & small.attrs }
	small.attrs =
		(	common.attrs
		&	common.attrs.aria?
		)
	small.inner =
		( common.inner.phrasing )

	common.elem.phrasing |= small.elem

## Marked (Highlighted) Text: <mark>

	mark.elem =
		element mark { mark.inner & mark.attrs }
		& v5only
	mark.attrs =
		(	common.attrs
		&	(	common.attrs.aria.role.presentation
			|	common.attrs.aria.role.menuitem
			)?
		)
	mark.inner =
		( common.inner.phrasing )

	common.elem.phrasing |= mark.elem

## Abbreviation: <abbr>

	abbr.elem =
		element abbr { abbr.inner & abbr.attrs }
	abbr.attrs =
		(	common.attrs
		#	abbr.attrs.title included in common.attrs
		&	common.attrs.aria?
		)
	abbr.inner =
		( common.inner.phrasing )

	common.elem.phrasing |= abbr.elem

## Defining Instance: <dfn>

	dfn.elem =
		element dfn { dfn.inner & dfn.attrs }
	dfn.attrs =
		(	common.attrs
		#	dfn.attrs.title included in common.attrs
		&	common.attrs.aria?
		)
	dfn.inner =
		( common.inner.phrasing )

	common.elem.phrasing |= dfn.elem

## Italic: <i>

	i.elem =
		element i { i.inner & i.attrs }
	i.attrs =
		(	common.attrs
		&	common.attrs.aria?
		)
	i.inner =
		( common.inner.phrasing )

	common.elem.phrasing |= i.elem

## Bold: <b>

	b.elem =
		element b { b.inner & b.attrs }
	b.attrs =
		(	common.attrs
		&	common.attrs.aria?
		)
	b.inner =
		( common.inner.phrasing )

	common.elem.phrasing |= b.elem

## Struck Text: <s>

	s.elem =
		element s { s.inner & s.attrs }
	s.attrs =
		(	common.attrs
		&	common.attrs.aria?
		)
	s.inner =
		( common.inner.phrasing )

	common.elem.phrasing |= s.elem

## Underline: <u>

	u.elem =
		element u { u.inner & u.attrs }
	u.attrs =
		(	common.attrs
		&	common.attrs.aria?
		)
	u.inner =
		( common.inner.phrasing )

	common.elem.phrasing |= u.elem

## Code Fragment: <code>

	code.elem =
		element code { code.inner & code.attrs }
	code.attrs =
		(	common.attrs
		&	common.attrs.aria?
		)
	code.inner =
		( common.inner.phrasing )

	common.elem.phrasing |= code.elem

## Variable or Placeholder: <var>

	var.elem =
		element var { var.inner & var.attrs }
	var.attrs =
		(	common.attrs
		&	common.attrs.aria?
		)
	var.inner =
		( common.inner.phrasing )

	common.elem.phrasing |= var.elem

## (Sample) Output: <samp>

	samp.elem =
		element samp { samp.inner & samp.attrs }
	samp.attrs =
		(	common.attrs
		&	common.attrs.aria?
		)
	samp.inner =
		( common.inner.phrasing )

	common.elem.phrasing |= samp.elem

## User Input: <kbd>

	kbd.elem =
		element kbd { kbd.inner & kbd.attrs }
	kbd.attrs =
		(	common.attrs
		&	common.attrs.aria?
		)
	kbd.inner =
		( common.inner.phrasing )

	common.elem.phrasing |= kbd.elem

## Superscript: <sup>

	sup.elem =
		element sup { sup.inner & sup.attrs }
	sup.attrs =
		(	common.attrs
		&	common.attrs.aria?
		)
	sup.inner =
		( common.inner.phrasing )

	common.elem.phrasing |= sup.elem

## Subscript: <sub>

	sub.elem =
		element sub { sub.inner & sub.attrs }
	sub.attrs =
		(	common.attrs
		&	common.attrs.aria?
		)
	sub.inner =
		( common.inner.phrasing )

	common.elem.phrasing |= sub.elem

## Quotation: <q>

	q.elem =
		element q { q.inner & q.attrs }
	q.attrs =
		(	common.attrs
		&	q.attrs.cite?
		&	common.attrs.aria?
		)
		q.attrs.cite =
			attribute cite {
				common.data.uri
			}
	q.inner =
		( common.inner.phrasing )

	common.elem.phrasing |= q.elem

## Title of Work: <cite>

	cite.elem =
		element cite { cite.inner & cite.attrs }
	cite.attrs =
		(	common.attrs
		&	common.attrs.aria?
		)
	cite.inner =
		( common.inner.phrasing )

	common.elem.phrasing |= cite.elem

## Generic Span: <span>

	span.elem =
		element span { span.inner & span.attrs }
	span.attrs =
		(	common.attrs
		&	common.attrs.aria?
		)
	span.inner =
		( common.inner.phrasing ) # REVISIT allow ol and ul?

	common.elem.phrasing |= span.elem

## Bidirectional Override: <bdo>

	bdo.elem =
		element bdo { bdo.inner & bdo.attrs }
	bdo.attrs =
		(	common.attrs # dir required in Schematron
		&	(	common.attrs.aria.role.presentation
			|	common.attrs.aria.role.menuitem
			)?
		)
	bdo.inner =
		( common.inner.phrasing )

	common.elem.phrasing |= bdo.elem

## Bidirectional Isolate: <bdi>

	bdi.elem =
		element bdi { bdi.inner & bdi.attrs }
	bdi.attrs =
		(	common.attrs
		&	(	common.attrs.aria.role.presentation
			|	common.attrs.aria.role.menuitem
			)?
		)
	bdi.inner =
		( common.inner.phrasing )

	common.elem.phrasing |= bdi.elem

## Line Break: <br>

	br.elem =
		element br { br.inner & br.attrs }
	br.attrs =
		(	common.attrs
		&	(	common.attrs.aria.role.presentation
			|	common.attrs.aria.role.menuitem
			)?
		)
	br.inner =
		( empty )

	common.elem.phrasing |= br.elem

## Line-break opportunity: <wbr>

	wbr.elem =
		element wbr { wbr.inner & wbr.attrs }
	wbr.attrs =
		(	common.attrs
		&	(	common.attrs.aria.role.presentation
			|	common.attrs.aria.role.menuitem
			)?
		)
	wbr.inner =
		( empty )

	common.elem.phrasing |= wbr.elem
