defaults
{
  rules
	{
	  ...
	}
}

tags
{
  <tagname>
  {
	  rules
	  {
	    accept
		  {
		    [all | none]
		    add { <tag> ... }
			  sub { <tag> ... }
		  }

      print
		  {
		    [all | none]
		    add { <tag> ... }
			  sub { <tag> ... }
		  }

      data
			{
			  [all | none]
				add { <tag> ... }
				sub { <tag> ... }
			}
			
			first
			{
				<tag> ...
			}
			
			last
			{
			  <tag> ...
			}
	  }

    print
    {
      text { <text> }
	    attr { <attr> }
			pop { <var> }
	    recurse [ { pre-trim post-trim } ]

      if
	    {
	      attr { <attr> [ { <data> } ] }
	    }
	    do
	    {
	      text { <text> }
		    attr { <attr> }
				pop { <var> }
		    recurse [ { pre-trim post-trim } ]
	    }
    }
		
    push
    { 
      <var>
      {
        text { <text> }
	      attr { <attr> }
        data
	      data-recurse
      }
    }
		
		0 { <var> }
		1 { <var> }
		++ { <var> }
		
		setsub
		{
		  <tagname>
			{
			  [rules | print | push] { ... }
			}
		}
		
		exception
  }
}




--- Internal rules list ---


rules
{
  [deny | accept]
	{
	  <tag> ...
	}
	
	[noprint | print]
	{
	  <tag> ...
	}

	[nodata | data]
	{
	  <tag> ...
	}
	
	first
	{
	  <tag> ...
	}
	
	last
	{
	  <tag> ...
	}
}
