whole_func_string: function(editor) {
  			var allowedSyntaxes = {'html': 1, 'xml': 1, 'xsl': 1};
  			var syntax = String(editor.getSyntax());
  			if (syntax in allowedSyntaxes) {
  				var content = String(editor.getContent());
  				var tag = require('htmlMatcher').find(content, editor.getCaretPos());
  				
  				if (tag && tag.type == 'tag') {
  					var startTag = tag.open;
  					var contextNode = {
  						name: startTag.name,
  						attributes: []
  					};
  					
  					// parse attributes
  					var tagTree = require('xmlEditTree').parse(startTag.range.substring(content));
  					if (tagTree) {
  						contextNode.attributes = _.map(tagTree.getAll(), function(item) {
  							return {
  								name: item.name(),
  								value: item.value()
  							};
  						});
  					}
  					
  					return contextNode;
  				}
  			}
  			
  			return null;
  		}
func_code_string: function(editor) {
  			var allowedSyntaxes = {'html': 1, 'xml': 1, 'xsl': 1};
  			var syntax = String(editor.getSyntax());
  			if (syntax in allowedSyntaxes) {
  				var content = String(editor.getContent());
  				var tag = require('htmlMatcher').find(content, editor.getCaretPos());
  				
  				if (tag && tag.type == 'tag') {
  					var startTag = tag.open;
  					var contextNode = {
  						name: startTag.name,
  						attributes: []
  					};
  					
  					// parse attributes
  					var tagTree = require('xmlEditTree').parse(startTag.range.substring(content));
  					if (tagTree) {
  						contextNode.attributes = _.map(tagTree.getAll(), function(item) {
  							return {
  								name: item.name(),
  								value: item.value()
  							};
  						});
  					}
  					
  					return contextNode;
  				}
  			}
  			
  			return null;
  		}
func_documentation_string: Captures context XHTML element from editor under current caret position.
  This node can be used as a helper for abbreviation extraction
  @param {IEmmetEditor} editor
  @returns {Object}