whole_func_string: function addCustomElements(custom_elements) {
  			var customElementRegExp = /^(~)?(.+)$/;
  
  			if (custom_elements) {
  				each(split(custom_elements), function(rule) {
  					var matches = customElementRegExp.exec(rule),
  						inline = matches[1] === '~',
  						cloneName = inline ? 'span' : 'div',
  						name = matches[2];
  
  					children[name] = children[cloneName];
  					customElementsMap[name] = cloneName;
  
  					// If it's not marked as inline then add it to valid block elements
  					if (!inline) {
  						blockElementsMap[name.toUpperCase()] = {};
  						blockElementsMap[name] = {};
  					}
  
  					// Add elements clone if needed
  					if (!elements[name]) {
  						elements[name] = elements[cloneName];
  					}
  
  					// Add custom elements at span/div positions
  					each(children, function(element, child) {
  						if (element[cloneName])
  							element[name] = element[cloneName];
  					});
  				});
  			}
  		}
func_code_string: function addCustomElements(custom_elements) {
  			var customElementRegExp = /^(~)?(.+)$/;
  
  			if (custom_elements) {
  				each(split(custom_elements), function(rule) {
  					var matches = customElementRegExp.exec(rule),
  						inline = matches[1] === '~',
  						cloneName = inline ? 'span' : 'div',
  						name = matches[2];
  
  					children[name] = children[cloneName];
  					customElementsMap[name] = cloneName;
  
  					// If it's not marked as inline then add it to valid block elements
  					if (!inline) {
  						blockElementsMap[name.toUpperCase()] = {};
  						blockElementsMap[name] = {};
  					}
  
  					// Add elements clone if needed
  					if (!elements[name]) {
  						elements[name] = elements[cloneName];
  					}
  
  					// Add custom elements at span/div positions
  					each(children, function(element, child) {
  						if (element[cloneName])
  							element[name] = element[cloneName];
  					});
  				});
  			}
  		}
func_documentation_string: Adds custom non HTML elements to the schema