whole_func_string: function processClassName(name, item) {
  		name = transformClassName(name, item, 'element');
  		name = transformClassName(name, item, 'modifier');
  		
  		// expand class name
  		// possible values:
  		// * block__element
  		// * block__element_modifier
  		// * block__element_modifier1_modifier2
  		// * block_modifier
  		var block = '', element = '', modifier = '';
  		var separators = getSeparators();
  		if (~name.indexOf(separators.element)) {
  			var blockElem = name.split(separators.element);
  			var elemModifiers = blockElem[1].split(separators.modifier);
  			
  			block = blockElem[0];
  			element = elemModifiers.shift();
  			modifier = elemModifiers.join(separators.modifier);
  		} else if (~name.indexOf(separators.modifier)) {
  			var blockModifiers = name.split(separators.modifier);
  			
  			block = blockModifiers.shift();
  			modifier = blockModifiers.join(separators.modifier);
  		}
  		
  		if (block || element || modifier) {
  			if (!block) {
  				block = item.__bem.block;
  			}
  			
  			// inherit parent bem element, if exists
  //			if (item.parent && item.parent.__bem && item.parent.__bem.element)
  //				element = item.parent.__bem.element + separators.element + element;
  			
  			// produce multiple classes
  			var prefix = block;
  			var result = [];
  			
  			if (element) {
  				prefix += separators.element + element;
  				result.push(prefix);
  			} else {
  				result.push(prefix);
  			}
  			
  			if (modifier) {
  				result.push(prefix + separators.modifier + modifier);
  			}
  			
  			item.__bem.block = block;
  			item.__bem.element = element;
  			item.__bem.modifier = modifier;
  			
  			return result;
  		}
  		
  		// ...otherwise, return processed or original class name
  		return name;
  	}
func_code_string: function processClassName(name, item) {
  		name = transformClassName(name, item, 'element');
  		name = transformClassName(name, item, 'modifier');
  		
  		// expand class name
  		// possible values:
  		// * block__element
  		// * block__element_modifier
  		// * block__element_modifier1_modifier2
  		// * block_modifier
  		var block = '', element = '', modifier = '';
  		var separators = getSeparators();
  		if (~name.indexOf(separators.element)) {
  			var blockElem = name.split(separators.element);
  			var elemModifiers = blockElem[1].split(separators.modifier);
  			
  			block = blockElem[0];
  			element = elemModifiers.shift();
  			modifier = elemModifiers.join(separators.modifier);
  		} else if (~name.indexOf(separators.modifier)) {
  			var blockModifiers = name.split(separators.modifier);
  			
  			block = blockModifiers.shift();
  			modifier = blockModifiers.join(separators.modifier);
  		}
  		
  		if (block || element || modifier) {
  			if (!block) {
  				block = item.__bem.block;
  			}
  			
  			// inherit parent bem element, if exists
  //			if (item.parent && item.parent.__bem && item.parent.__bem.element)
  //				element = item.parent.__bem.element + separators.element + element;
  			
  			// produce multiple classes
  			var prefix = block;
  			var result = [];
  			
  			if (element) {
  				prefix += separators.element + element;
  				result.push(prefix);
  			} else {
  				result.push(prefix);
  			}
  			
  			if (modifier) {
  				result.push(prefix + separators.modifier + modifier);
  			}
  			
  			item.__bem.block = block;
  			item.__bem.element = element;
  			item.__bem.modifier = modifier;
  			
  			return result;
  		}
  		
  		// ...otherwise, return processed or original class name
  		return name;
  	}
func_documentation_string: Processes class name
  @param {String} name Class name item to process
  @param {AbbreviationNode} item Host node for provided class name
  @returns Processed class name. May return <code>Array</code> of
  class names