whole_func_string: function getBlocks( text ) {
  	var blocks = [], depth = 0,
  		blockStartTag = "",
  		currentBlock = "",
  		blockEndTag = "";
  
  	// Remove all comments because it is very hard to tokenize them.
  	text = text.replace( commentRegex, "" );
  
  	createTokenizer();
  	htmlBlockTokenizer.onText( text );
  	htmlBlockTokenizer.end();
  
  	forEach( tokens, function( token, i ) {
  		var nextToken = tokens[ i + 1 ];
  
  		switch ( token.type ) {
  			case "content":
  			case "greater-than-sign-content":
  			case "inline-start":
  			case "inline-end":
  			case "other-tag":
  			case "other-element-start":
  			case "other-element-end":
  			case "greater than sign":
  				if ( ! nextToken || ( depth === 0 && ( nextToken.type === "block-start" || nextToken.type === "block-end" ) ) ) {
  					currentBlock += token.src;
  
  					blocks.push( currentBlock );
  					blockStartTag = "";
  					currentBlock = "";
  					blockEndTag = "";
  				} else {
  					currentBlock += token.src;
  				}
  				break;
  
  			case "block-start":
  				if ( depth !== 0 ) {
  					if ( currentBlock.trim() !== "" ) {
  						blocks.push( currentBlock );
  					}
  					currentBlock = "";
  					blockEndTag = "";
  				}
  
  				depth++;
  				blockStartTag = token.src;
  				break;
  
  			case "block-end":
  				depth--;
  				blockEndTag = token.src;
  
  				/*
  				 * We try to match the most deep blocks so discard any other blocks that have been started but not
  				 * finished.
  				 */
  				if ( "" !== blockStartTag && "" !== blockEndTag ) {
  					blocks.push( blockStartTag + currentBlock + blockEndTag );
  				} else if ( "" !== currentBlock.trim() ) {
  					blocks.push( currentBlock );
  				}
  				blockStartTag = "";
  				currentBlock = "";
  				blockEndTag = "";
  				break;
  		}
  
  		// Handles HTML with too many closing tags.
  		if ( depth < 0 ) {
  			depth = 0;
  		}
  	} );
  
  	return blocks;
  }
func_code_string: function getBlocks( text ) {
  	var blocks = [], depth = 0,
  		blockStartTag = "",
  		currentBlock = "",
  		blockEndTag = "";
  
  	// Remove all comments because it is very hard to tokenize them.
  	text = text.replace( commentRegex, "" );
  
  	createTokenizer();
  	htmlBlockTokenizer.onText( text );
  	htmlBlockTokenizer.end();
  
  	forEach( tokens, function( token, i ) {
  		var nextToken = tokens[ i + 1 ];
  
  		switch ( token.type ) {
  			case "content":
  			case "greater-than-sign-content":
  			case "inline-start":
  			case "inline-end":
  			case "other-tag":
  			case "other-element-start":
  			case "other-element-end":
  			case "greater than sign":
  				if ( ! nextToken || ( depth === 0 && ( nextToken.type === "block-start" || nextToken.type === "block-end" ) ) ) {
  					currentBlock += token.src;
  
  					blocks.push( currentBlock );
  					blockStartTag = "";
  					currentBlock = "";
  					blockEndTag = "";
  				} else {
  					currentBlock += token.src;
  				}
  				break;
  
  			case "block-start":
  				if ( depth !== 0 ) {
  					if ( currentBlock.trim() !== "" ) {
  						blocks.push( currentBlock );
  					}
  					currentBlock = "";
  					blockEndTag = "";
  				}
  
  				depth++;
  				blockStartTag = token.src;
  				break;
  
  			case "block-end":
  				depth--;
  				blockEndTag = token.src;
  
  				/*
  				 * We try to match the most deep blocks so discard any other blocks that have been started but not
  				 * finished.
  				 */
  				if ( "" !== blockStartTag && "" !== blockEndTag ) {
  					blocks.push( blockStartTag + currentBlock + blockEndTag );
  				} else if ( "" !== currentBlock.trim() ) {
  					blocks.push( currentBlock );
  				}
  				blockStartTag = "";
  				currentBlock = "";
  				blockEndTag = "";
  				break;
  		}
  
  		// Handles HTML with too many closing tags.
  		if ( depth < 0 ) {
  			depth = 0;
  		}
  	} );
  
  	return blocks;
  }
func_documentation_string: Splits a text into blocks based on HTML block elements.
  
  @param {string} text The text to split.
  @returns {Array} A list of blocks based on HTML block elements.