whole_func_string: function (context, text) {
  	var i = text.indexOf(' ');
  	if (i === -1) {
  		var name = text;
  		var body = '';
  	} else {
  		var name = text.slice(0, i).replace(/^\s+|\s+$/g, '');
  		var body = text.slice(i + 1).trim();
  	}
  	name = name.toLowerCase();
  
  	if (typeof(context.tags[name]) === 'function') {
  		context.tags[name](context, name, body);
  	} else {
  		context.astStack.push(context.astNode(OPCODE.UNKNOWN_TAG, name, body));
  	}
  }
func_code_string: function (context, text) {
  	var i = text.indexOf(' ');
  	if (i === -1) {
  		var name = text;
  		var body = '';
  	} else {
  		var name = text.slice(0, i).replace(/^\s+|\s+$/g, '');
  		var body = text.slice(i + 1).trim();
  	}
  	name = name.toLowerCase();
  
  	if (typeof(context.tags[name]) === 'function') {
  		context.tags[name](context, name, body);
  	} else {
  		context.astStack.push(context.astNode(OPCODE.UNKNOWN_TAG, name, body));
  	}
  }
func_documentation_string: Parse "{%tag%}"
  
  @param {Object} context
  @param {String} text
  @return {Array}