
class Sugar:

	Template = require "../template";
	Grammar  = require "../../core/grammar";

	constructor(name, pattern, body, location):
		@.name     = name;
		@.pattern  = pattern
		@.bodys    = Template.create(body, ['std', 'node', 'scope']);
		@.location = location;

	parse(parser, tar, params):
		if tar.isSource:
			index = tar.index;
			if node = parser.pattern( @.pattern, tar, params, @.name):
				return node;
			tar.index = index;

		else if tar.isNode:
			scope = tar.scope;
			patt = '';
			for item => @.bodys:
				if item as 'function':
					item = item.apply(@, [parser, tar, scope]);
				if item as 'string':
					patt += item;
				else if item:
					return item;
			patt = patt.trim();
			return parser.pattern(patt, tar);

	error():
		Err @.location;


module.exports = Sugar;