docs: function parseNode(node, options) {
  			var
  				allText = grabAllTextNodes(node, []),
  				length = allText.length,
  				attrib,
  				attrname,
  				modified,
  				fragment,
  				subnode,
  				text,
  				match,
  				i,
  				index,
  				img,
  				alt,
  				icon,
  				variant,
  				src;
  			while (length--) {
  				modified = false;
  				fragment = document.createDocumentFragment();
  				subnode = allText[length];
  				text = subnode.nodeValue;
  				i = 0;
  				while ((match = re.exec(text))) {
  					index = match.index;
  					if (index !== i) {
  						fragment.appendChild(
  							createText(text.slice(i, index))
  						);
  					}
  					alt = match[0];
  					icon = match[1];
  					variant = match[2];
  					i = index + alt.length;
  					if (variant !== '\uFE0E') {
  						src = options.callback(
  							grabTheRightIcon(icon, variant),
  							options,
  							variant
  						);
  						if (src) {
  							img = new Image();
  							img.onerror = options.onerror;
  							img.setAttribute('draggable', 'false');
  							attrib = options.attributes(icon, variant);
  							for (attrname in attrib) {
  								if (
  									attrib.hasOwnProperty(attrname) &&
  										// don't allow any handlers to be set + don't allow overrides
  									attrname.indexOf('on') !== 0 &&
  									!img.hasAttribute(attrname)
  								) {
  									img.setAttribute(attrname, attrib[attrname]);
  								}
  							}
  							img.className = options.className;
  							img.alt = alt;
  							img.src = src;
  							modified = true;
  							fragment.appendChild(img);
  						}
  					}
  					if (!img) fragment.appendChild(createText(alt));
  					img = null;
  				}
  				// is there actually anything to replace in here ?
  				if (modified) {
  					// any text left to be added ?
  					if (i < text.length) {
  						fragment.appendChild(
  							createText(text.slice(i))
  						);
  					}
  					// replace the text node only, leave intact
  					// anything else surrounding such text
  					subnode.parentNode.replaceChild(fragment, subnode);
  				}
  			}
  			return node;
  		}