main

webclient grammar version yar.11.0

'initial content': dictionary { [ window ]
	'from': stategroup (
		'user' { [ user ] }
		'root' { [ root ] }
	)
	'expression': component 'view expression'
}
'root window': [ @ ] reference
'views': [ from ] reference
'root view': [ : ] reference
'node equality' { }
'ancestor node path' {
	'has step': stategroup (
		'yes' { [ ^ ]
			'tail': component 'ancestor node path'
		}
		'no' { }
	)
}
'view expression list' {
	'expression': [ (, ) ] component 'view expression'
	'has alternative': stategroup (
		'yes' {
			'tail': component 'view expression list'
		}
		'no' { }
	)
}
'view expression' {
	'type': stategroup (
		'group step' {
			'group': [ . ] reference
			'expression': component 'view expression'
		}
		'state switch' { [ switch ]
			'stategroup': [ . ] reference
			'cases': [ (, ) ] dictionary { [ | ]
				'path': component 'ancestor node path'
				'expression': component 'view expression'
			}
		}
		'reference step' {
			'type': stategroup (
				'reference' {
					'reference': [ > ] reference
				}
				'property rule' {
					'property': [ . ] reference
					'rule': [ & ] reference
				}
				'context rule' {
					'rule': [ .& ] reference
				}
			)
			'expression': component 'view expression'
		}
		'collection lookup' {
			'collection': [ . ] reference
			'references users': [ [ user > ] component 'node equality'
			'expression': [ ] ] component 'view expression'
		}
		'branches' {
			'list': [ (, ) ] component 'view expression list'
		}
		'view open' { [ open view ]
			'from': reference
			'view': [ : ] reference
			'node': [ with ] stategroup (
				'current' {
					'path': component 'ancestor node path'
				}
				'user' { [ user ] }
				'root' { [ root ] }
			)
		}
		'none' { [ none ] }
	)
}