vendor/emmet.js
function process(tree, profile) {
		if (tree.name)
			bemParse(tree, profile);
		
		var abbrUtils = require('abbreviationUtils');
		_.each(tree.children, function(item) {
			process(item, profile);
			if (!abbrUtils.isSnippet(item) && item.start)
				shouldRunHtmlFilter = true;
		});
		
		return tree;
	}
function process(tree, profile) {
		if (tree.name)
			bemParse(tree, profile);
		
		var abbrUtils = require('abbreviationUtils');
		_.each(tree.children, function(item) {
			process(item, profile);
			if (!abbrUtils.isSnippet(item) && item.start)
				shouldRunHtmlFilter = true;
		});
		
		return tree;
	}
Recursive function for processing tags, which extends class names
according to BEM specs: http://bem.github.com/bem-method/pages/beginning/beginning.ru.html
<br><br>
It does several things:<br>
<ul>
<li>Expands complex class name (according to BEM symbol semantics):
.block__elem_modifier → .block.block__elem.block__elem_modifier
</li>
<li>Inherits block name on child elements:
.b-block > .__el > .__el → .b-block > .b-block__el > .b-block__el__el
</li>
<li>Treats first dash symbol as '__'</li>
<li>Double underscore (or typographic '–') is also treated as an element
level lookup, e.g. ____el will search for element definition in parent’s
parent element:
.b-block > .__el1 > .____el2 → .b-block > .b-block__el1 > .b-block__el2
</li>
</ul>

@param {AbbreviationNode} tree
@param {Object} profile