()
| 123998 | const innerText = (val)=>(val + "").replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">"); |
| 123999 | const attrText = (val)=>innerText(val).replace(/"/g, """).replace(/\t/g, "	").replace(/\n/g, "
").replace(/\r/g, "
"); |
| 124000 | function markup() { |
| 124001 | let buf = "", outer = "", inner = ""; |
| 124002 | const stack = [], clear = ()=>outer = inner = "", push = (tag)=>{ |
| 124003 | if (outer) { |
| 124004 | buf += `${outer}>${inner}`; |
| 124005 | clear(); |
| 124006 | } |
| 124007 | stack.push(tag); |
| 124008 | }, attr3 = (name, value8)=>{ |
| 124009 | if (value8 != null) outer += ` ${name}="${attrText(value8)}"`; |
| 124010 | return m; |
| 124011 | }, m = { |
| 124012 | open (tag, ...attrs) { |
| 124013 | push(tag); |
| 124014 | outer = "<" + tag; |
| 124015 | for (const set of attrs)for(const key in set)attr3(key, set[key]); |
| 124016 | return m; |
| 124017 | }, |
| 124018 | close () { |
| 124019 | const tag = stack.pop(); |
| 124020 | if (outer) buf += outer + (inner ? `>${inner}</${tag}>` : "/>"); |
| 124021 | else buf += `</${tag}>`; |
| 124022 | clear(); |
| 124023 | return m; |
| 124024 | }, |
| 124025 | attr: attr3, |
| 124026 | text: (t)=>(inner += innerText(t), m), |
| 124027 | toString: ()=>buf |
| 124028 | }; |
| 124029 | return m; |
| 124030 | } |
| 124031 | const serializeXML = (node)=>_serialize(markup(), node) + ""; |
| 124032 | function _serialize(m, node) { |
| 124033 | m.open(node.tagName); |
no test coverage detected