var VnObject = require ('./object');

/**
 * Base class for compilers.
 */
module.exports = new Class
({
	Extends: VnObject

	,compile: function () {}
	,postCompile: function () {}
	,instantiate: function () {}
	,preLink: function () {}
	,link: function () {}
	,connect: function () {}
	,postLink: function () {}

	,initialize: function (builder)
	{
		this._builder = builder;
		this.parent ();
	}

	/**
	 * Translates a string if it's a translatable string.
	 * 
	 * @param {String} value The string to check and translate
	 * @return {String} The translated string or the same string if it is not translatable
	 */
	,translateValue: function (value)
	{
		switch (value.charAt (0))
		{
			case '_':
				return _(value.substr (1));
			case '\\':
				switch (value.charAt(1))
				{
					case '_':
					case '\\':
						return value.substr (1);
					default:
						return value;
				}
			default:
				return value;
		}	
	}

	/**
	 * Checks if the passed attribute name it's an event.
	 * 
	 * @param {String} attribute The attribute name
	 * @return {Boolean} %true if it's an event, otherwise %false
	 */
	,isEvent: function (attribute)
	{
		return /^on-\w+/.test (attribute);
	}

	/**
	 * Logs an error parsing the node.
	 * 
	 * @param {String} error The error message template
	 * @param {...} varArgs The message template arguments
	 */
	,showError: function ()
	{
		this._builder.showError.apply (this._builder, arguments);
	}
});