tag-soup
Version:
The fastest pure JS SAX/DOM XML/HTML parser.
26 lines (25 loc) • 974 B
JavaScript
import { getCaseInsensitiveHashCode, getCaseSensitiveHashCode } from './tokenizeMarkup.js';
import { serializeMarkup } from './serializeMarkup.js';
/**
* Serializes DOM node as HTML/XML string.
*
* @param options Serialization options.
* @see {@link toHTML}
* @see {@link toXML}
* @group Serializer
*/
export function createSerializer(options = {}) {
const resolvedOptions = resolveSerializerOptions(options);
return node => serializeMarkup(node, resolvedOptions);
}
export function resolveSerializerOptions(options) {
const { voidTags, areTagNamesCaseInsensitive, areSelfClosingTagsSupported, encodeText } = options;
const getHashCode = areTagNamesCaseInsensitive ? getCaseInsensitiveHashCode : getCaseSensitiveHashCode;
const toHashCode = (str) => getHashCode(str, 0, str.length);
return {
toHashCode,
voidTags: voidTags && new Set(voidTags.map(toHashCode)),
areSelfClosingTagsSupported,
encodeText,
};
}