vendor/emmet.js
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;
		}
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;
		}
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}