diff --git a/docs/testdox.txt b/docs/testdox.txt
index 837e32993..a7f8488cf 100644
--- a/docs/testdox.txt
+++ b/docs/testdox.txt
@@ -3375,8 +3375,12 @@ Abstract Normalization (s9e\TextFormatter\Tests\Configurator\AbstractNormalizati
[x] Nothing happens if the normalization doesn't override any method or set any query
[x] Nothing happens if the normalization doesn't override any method but set an element query
[x] Nothing happens if the normalization doesn't override any method but set an attribute query
- [x] Calls normalizeAttribute() if an XPath query returns a DOMElement
- [x] Calls normalizeElement() if an XPath query returns a DOMElement
+ [x] Nothing happens if the normalization doesn't override any method but selects a CData node
+ [x] Nothing happens if the normalization doesn't override any method but selects a comment node
+ [x] Calls normalizeAttribute() if an XPath query returns an attribute
+ [x] Calls normalizeAttribute() if an XPath query returns a CDATA node
+ [x] Calls normalizeComment() if an XPath query returns a comment node
+ [x] Calls normalizeElement() if an XPath query returns an element
[x] Nodes removed during normalization are not processed further
[x] Can create text nodes
[x] isXsl() differentiates between XSL elements and others
@@ -7977,7 +7981,7 @@ Cached (s9e\TextFormatter\Tests\Utils\Http\Clients\Cached)
[x] get() returns headers if returnHeaders is true
Curl (s9e\TextFormatter\Tests\Utils\Http\Clients\Curl)
- [ ] Uses gzip by default if ext/zlib is availble
+ [x] Uses gzip by default if ext/zlib is availble
[x] Sends custom headers
[x] Resets custom headers between requests
[x] post() sends the request body if set
diff --git a/src/Bundles/Fatdown.php b/src/Bundles/Fatdown.php
index dbf7e7e53..8a83c49ef 100644
--- a/src/Bundles/Fatdown.php
+++ b/src/Bundles/Fatdown.php
@@ -43,33 +43,33 @@ function yb(a){return encodeURIComponent(a).replace(/[!\'()*]/g,b=>"%"+b.charCod
function Fb(a,b,c,d,l){this.l=+a;this.name=b;this.j=+c;this.k=+d;this.r=+l||0;this.b={};this.O=[];isNaN(a+c+d)&&F(this)}Fb.prototype.p=!1;function Gb(a,b){a.O.push(b);a.p&&F(b)}function F(a){a.p||(a.p=!0,a.O.forEach(function(b){F(b)}))}function Hb(a,b){Ib(a,b)?(a.B=b,b.H=a,Gb(a,b)):Ib(b,a)&&(a.H=b,b.B=a)}function Ib(a,b){return a.name===b.name&&1===a.l&&2===b.l&&a.j<=a.j}function Jb(a){let b={};for(let c in a.b)b[c]=a.b[c];return b}
function Kb(a,b){return a.p||!Ib(b,a)||a.H&&a.H!==b||b.B&&b.B!==a?!1:!0}function Na(a,b){a.b={};for(let c in b)a.b[c]=b[c]}let Lb,Mb,H,Nb,I,Ob,C=new Db,Pb,J,L;
const Sb={Autoemail:{u:function(a,b){b.forEach(c=>{let d=M(1,"EMAIL",c[0][1],0,0);d.b.email=c[0][0];c=Qb("EMAIL",c[0][1]+c[0][0].length,0);Hb(d,c)})},w:"@",x:/\\b[-a-z0-9_+.]+@[-a-z0-9.]*[a-z0-9]/ig,y:5E4},Autolink:{u:function(a,b){b.forEach(c=>{var d=c[0][1],l=c[0][0].replace(/(?:(?![-=+)\\/_])[\\s!-.:-@[-`{-~])+$/,"");let k=d+l.length,g=Qb("URL",k,0);"."===l[3]&&(l="http://"+l);c=M(1,"URL",d,0,1);c.b.url=l;Hb(c,g);d=M(3,"v",d,k-d,1E3);Gb(c,d)})},w:":",x:/\\b(?:ftp|https?|mailto):(?:[^\\s()\\[\\]\\uFF01-\\uFF0F\\uFF1A-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65]|\\([^\\s()]*\\)|\\[\\w*\\])+/ig,
-y:5E4},Escaper:{u:function(a,b){b.forEach(c=>{O("ESC",c[0][1],1,c[0][1]+c[0][0].length,0)})},w:"\\\\",x:/\\\\[-!#()*+.:<>@[\\\\\\]^_`{|}~]/g,y:5E4},FancyPants:{u:function(a){function b(f,m,n,t){f=M(3,q,f,m,t||0);f.b[e]=n;return f}function c(){if(!(0>a.indexOf("...")&&0>a.indexOf("--")))for(var f={"--":"\\u2013","---":"\\u2014","...":"\\u2026"},m=/---?|\\.\\.\\./g,n;n=m.exec(a);)b(n.index,n[0].length,f[n[0]])}function d(){if(!(0>a.indexOf("/")))for(var f={"0/3":"\\u2189","1/10":"\\u2152","1/2":"\\u00bd","1/3":"\\u2153",
+y:5E4},Escaper:{u:function(a,b){b.forEach(c=>{O("ESC",c[0][1],1,c[0][1]+c[0][0].length,0)})},w:"\\\\",x:/\\\\[-!#()*+.:<>@[\\\\\\]^_`{|}~]/g,y:5E4},FancyPants:{u:function(a){function b(f,m,n,u){f=M(3,r,f,m,u||0);f.b[e]=n;return f}function c(){if(!(0>a.indexOf("...")&&0>a.indexOf("--")))for(var f={"--":"\\u2013","---":"\\u2014","...":"\\u2026"},m=/---?|\\.\\.\\./g,n;n=m.exec(a);)b(n.index,n[0].length,f[n[0]])}function d(){if(!(0>a.indexOf("/")))for(var f={"0/3":"\\u2189","1/10":"\\u2152","1/2":"\\u00bd","1/3":"\\u2153",
"1/4":"\\u00bc","1/5":"\\u2155","1/6":"\\u2159","1/7":"\\u2150","1/8":"\\u215b","1/9":"\\u2151","2/3":"\\u2154","2/5":"\\u2156","3/4":"\\u00be","3/5":"\\u2157","3/8":"\\u215c","4/5":"\\u2158","5/6":"\\u215a","5/8":"\\u215d","7/8":"\\u215e"},m,n=/\\b(?:0\\/3|1\\/(?:[2-9]|10)|2\\/[35]|3\\/[458]|4\\/5|5\\/[68]|7\\/8)\\b/g;m=n.exec(a);)b(m.index,m[0].length,f[m[0]])}function l(){if(!(0>a.indexOf("<<")))for(var f,m=/<<( ?)(?! )[^\\n<>]*?[^\\n <>]\\1>>(?!>)/g;f=m.exec(a);){let n=b(f.index,2,"\\u00ab");f=b(f.index+f[0].length-2,2,
-"\\u00bb");Gb(n,f)}}function k(){if(!(0>a.indexOf("!=")&&0>a.indexOf("=/=")))for(var f,m=/\\b (?:!|=\\/)=(?= \\b)/g;f=m.exec(a);)b(f.index+1,f[0].length-1,"\\u2260")}function g(f,m,n,t){for(var y;y=m.exec(a);){let z=b(y.index+y[0].indexOf(f),1,n);y=b(y.index+y[0].length-1,1,t);Gb(z,y)}}function v(){if(h)for(var f,m=/[a-z]\'|(?:^|\\s)\'(?=[a-z]|[0-9]{2})/gi;f=m.exec(a);)b(f.index+f[0].indexOf("\'"),1,"\\u2019",10)}function p(){if(h||r||!(0>a.indexOf("x")))for(var f={"\'s":"\\u2019","\'":"\\u2032","\' ":"\\u2032",
-"\'x":"\\u2032",\'"\':"\\u2033",\'" \':"\\u2033",\'"x\':"\\u2033"},m,n=/[0-9](?:\'s|["\']? ?x(?= ?[0-9])|["\'])/g;m=n.exec(a);){"x"===m[0][m[0].length-1]&&b(m.index+m[0].length-1,1,"\\u00d7");let t=m[0].substring(1,3);f[t]&&b(m.index+1,1,f[t])}}function u(){if(!(0>a.indexOf("(")))for(var f={"(c)":"\\u00a9","(r)":"\\u00ae","(tm)":"\\u2122"},m=/\\((?:c|r|tm)\\)/gi,n;n=m.exec(a);)b(n.index,n[0].length,f[n[0].toLowerCase()])}const w={A:"char",K:"FP"};let e=w.A,h=0<=a.indexOf("\'"),r=0<=a.indexOf(\'"\'),q=w.K;"undefined"===
-typeof w.ca&&(v(),h&&g("\'",/(?:^|\\W)\'.+?\'(?!\\w)/g,"\\u2018","\\u2019"),r&&g(\'"\',/(?:^|\\W)".+?"(?!\\w)/g,"\\u201c","\\u201d"));"undefined"===typeof w.$&&l();"undefined"===typeof w.aa&&(k(),p(),d());"undefined"===typeof w.ba&&c();"undefined"===typeof w.da&&u()}},HTMLComments:{u:function(a,b){b.forEach(c=>{let d=Ab(c[0][0].substring(4,c[0][0].length-3));d=d.replace(/[<>]/g,"");d=d.replace(/-+$/,"");d=d.replace(/--/g,"");M(3,"HC",c[0][1],c[0][0].length,0).b.content=d})},w:"\\x3c!--",x:/\\x3c!--(?!\\[if)[\\s\\S]*?--\\x3e/ig,
-y:5E4},HTMLElements:{u:function(a,b){var c={a:{"":"URL",href:"url"},em:{"":"EM"},hr:{"":"HR"},s:{"":"S"},strong:{"":"STRONG"},sup:{"":"SUP"}};b.forEach(d=>{var l="/"===a[d[0][1]+1],k=d[0][1],g=d[0][0].length;let v=d[2-l][0].toLowerCase();var p=c&&c[v]&&c[v][""]?c[v][""]:"html:"+v;if(l)Qb(p,k,g);else for(l=/(<\\S+|[\'"\\s])\\/>$/.test(d[0][0])?O(p,k,g,k+g,0):M(1,p,k,g,0),d=d[3][0],k=/([a-z][-a-z0-9]*)(?:\\s*=\\s*("[^"]*"|\'[^\']*\'|[^\\s"\'=<>`]+))?/gi;p=k.exec(d);)g=p[1].toLowerCase(),p="undefined"!==typeof p[2]?
-p[2]:g,c&&c[v]&&c[v][g]&&(g=c[v][g]),/^["\']/.test(p)&&(p=p.substring(1,p.length-1)),p=Ab(p),l.b[g]=p})},w:"<",x:/<(?:\\/((?:a(?:bbr)?|br?|code|d(?:[dlt]|el|iv)|em|hr|i(?:mg|ns)?|li|ol|pre|r(?:[bp]|tc?|uby)|s(?:pan|trong|u[bp])?|t(?:[dr]|able|body|foot|h(?:ead)?)|ul?))|((?:a(?:bbr)?|br?|code|d(?:[dlt]|el|iv)|em|hr|i(?:mg|ns)?|li|ol|pre|r(?:[bp]|tc?|uby)|s(?:pan|trong|u[bp])?|t(?:[dr]|able|body|foot|h(?:ead)?)|ul?))((?:\\s+[a-z][-a-z0-9]*(?:\\s*=\\s*(?:"[^"]*"|\'[^\']*\'|[^\\s"\'=<>`]+))?)*)\\s*\\/?)\\s*>/ig,y:5E4},
-HTMLEntities:{u:function(a,b){b.forEach(c=>{let d=c[0][0],l=Ab(d);l===d||32>l.charCodeAt(0)||(M(3,"HE",c[0][1],d.length,0).b["char"]=l)})},w:"&",x:/&(?:[a-z]+|#(?:[0-9]+|x[0-9a-f]+));/ig,y:5E4},Litedown:{u:function(a){function b(e){-1","\\u001b8":"[","\\u001b9":"\\\\","\\u001bA":"]","\\u001bB":"^","\\u001bC":"_",
-"\\u001bD":"`","\\u001bE":"~"}[h]}));return e}function c(e){return 0<" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".indexOf(e)}function d(e){a=a.substring(0,e)+"\\u0017"+a.substring(e+1)}function l(e,h){0$/.test(q)&&(q=q.replace(/^<(.+)>$/,"$1").replace(/\\\\>/g,">"));q=b(q);e.b[r]=q;""<
-h&&(r=b(h),e.b.title=r)}let p=!1,u=!1,w={};0<=a.indexOf("\\\\")&&(p=!0,a=a.replace(/\\\\[!"\'()*<>[\\\\\\]^_`~]/g,function(e){return{"\\\\!":"\\u001b0",\'\\\\"\':"\\u001b1","\\\\\'":"\\u001b2","\\\\(":"\\u001b3","\\\\)":"\\u001b4","\\\\*":"\\u001b5","\\\\<":"\\u001b6","\\\\>":"\\u001b7","\\\\[":"\\u001b8","\\\\\\\\":"\\u001b9","\\\\]":"\\u001bA","\\\\^":"\\u001bB","\\\\_":"\\u001bC","\\\\`":"\\u001bD","\\\\~":"\\u001bE"}[e]}));a+="\\n\\n\\u0017";(function(){function e(m,n){Hb(Qb("LIST",n,0),m.V);Hb(Qb("LI",n,0),m.I);m.Q&&m.J.forEach(t=>{t.flags&=-9})}function h(m,
-n){let t=m;for(;0<=--n;)t=t.replace(/^ *>!? ?/,"");return m.length-t.length}function r(m){let n=[],t=/>!?/g,y;for(;y=t.exec(m);)n.push(y[0]);return n}function q(){if(-1!==a.indexOf("-")||-1!==a.indexOf("="))for(var m,n=/^(?=[-=>])(?:>!? ?)*(?=[-=])(?:-+|=+) *$/gm;m=n.exec(a);){let t=m[0];m=m.index;let y=m-1;for(;0/g,"").length,K:"="===t[0]?"H1":"H2"}}}let f={};(function(){q();let m=[],n=0,t,y=4,z,N=!0,E=[],K=0,aa=!1,T=0,na,ia,
-R,kb,$b,U,P,lb,Sa,ja,ka,qa,ac=[],mb,Ta=/^(?:(?=[-*+\\d \\t>`~#_])((?: {0,3}>(?:(?!!)|!(?![^\\n>]*?!<)) ?)+)?([ \\t]+)?(\\* *\\* *\\*[* ]*$|- *- *-[- ]*$|_ *_ *_[_ ]*$)?((?:[-*+]|\\d+\\.)[ \\t]+(?=\\S))?[ \\t]*(#{1,6}[ \\t]+|```+[^`\\n]*$|~~~+[^~\\n]*$)?)?/gm;for(;mb=Ta.exec(a);)ac.push(mb),mb.index===Ta.lastIndex&&++Ta.lastIndex;ac.forEach(D=>{var ba=[];let V=D.index;var ra=D[0].length,Q;ja=R=0;ia=!N;U=a.indexOf("\\n",V);N=U===V+ra&&!D[3]&&!D[4]&&!D[5];ra||++Ta.lastIndex;na=N&&ia;D[1]&&(ba=r(D[1]),ja=ba.length,R=
-D[1].length,z&&"blockDepth"in z.b&&(ja=Math.min(ja,z.b.blockDepth),R=h(D[1],ja)),l(V,R));if(jan&&!N){aa=!0;do m.push(M(1,">!"===ba[n]?"SPOILER":"QUOTE",V,0,-999));while(ja>++n)}W=Q=0;if(D[2]&&!t){kb=D[2];$b=kb.length;do" "===kb[W]?++Q:Q=Q+4&-4;while(++W<$b&&Qz.j?(l(z.j,T-z.j),Hb(z,Qb("CODE",T,0,-1))):F(z),t=z=null),E.forEach(Ba=>{e(Ba,T)}),E=[],K=0,V&&d(V-1));if(Q>=y){if(z||!ia)R=
+"\\u00bb");Gb(n,f)}}function k(){if(!(0>a.indexOf("!=")&&0>a.indexOf("=/=")))for(var f,m=/\\b (?:!|=\\/)=(?= \\b)/g;f=m.exec(a);)b(f.index+1,f[0].length-1,"\\u2260")}function g(f,m,n,u){for(var y;y=m.exec(a);){let z=b(y.index+y[0].indexOf(f),1,n);y=b(y.index+y[0].length-1,1,u);Gb(z,y)}}function v(){if(h)for(var f,m=/[a-z]\'|(?:^|\\s)\'(?=[a-z]|[0-9]{2})/gi;f=m.exec(a);)b(f.index+f[0].indexOf("\'"),1,"\\u2019",10)}function p(){if(h||t||!(0>a.indexOf("x")))for(var f={"\'s":"\\u2019","\'":"\\u2032","\' ":"\\u2032",
+"\'x":"\\u2032",\'"\':"\\u2033",\'" \':"\\u2033",\'"x\':"\\u2033"},m,n=/[0-9](?:\'s|["\']? ?x(?= ?[0-9])|["\'])/g;m=n.exec(a);){"x"===m[0][m[0].length-1]&&b(m.index+m[0].length-1,1,"\\u00d7");let u=m[0].substring(1,3);f[u]&&b(m.index+1,1,f[u])}}function q(){if(!(0>a.indexOf("(")))for(var f={"(c)":"\\u00a9","(r)":"\\u00ae","(tm)":"\\u2122"},m=/\\((?:c|r|tm)\\)/gi,n;n=m.exec(a);)b(n.index,n[0].length,f[n[0].toLowerCase()])}const w={A:"char",K:"FP"};let e=w.A,h=0<=a.indexOf("\'"),t=0<=a.indexOf(\'"\'),r=w.K;"undefined"===
+typeof w.ca&&(v(),h&&g("\'",/(?:^|\\W)\'.+?\'(?!\\w)/g,"\\u2018","\\u2019"),t&&g(\'"\',/(?:^|\\W)".+?"(?!\\w)/g,"\\u201c","\\u201d"));"undefined"===typeof w.$&&l();"undefined"===typeof w.aa&&(k(),p(),d());"undefined"===typeof w.ba&&c();"undefined"===typeof w.da&&q()}},HTMLComments:{u:function(a,b){b.forEach(c=>{let d=Ab(c[0][0].substring(4,c[0][0].length-3));d=d.replace(/[<>]/g,"");d=d.replace(/-+$/,"");d=d.replace(/--/g,"");M(3,"HC",c[0][1],c[0][0].length,0).b.content=d})},w:"\\x3c!--",x:/\\x3c!--(?!\\[if)[\\s\\S]*?--\\x3e/ig,
+y:5E4},HTMLElements:{u:function(a,b){var c={a:{"":"URL",href:"url"},em:{"":"EM"},hr:{"":"HR"},s:{"":"S"},strong:{"":"STRONG"},sup:{"":"SUP"}};b.forEach(d=>{var l="/"===a[d[0][1]+1],k=d[0][1],g=d[0][0].length;let v=d[2-l][0].toLowerCase();var p=c&&c[v]&&c[v][""]?c[v][""]:"html:"+v;if(l)Qb(p,k,g);else{l=/(<\\S+|[\'"\\s])\\/>$/.test(d[0][0])?O(p,k,g,k+g,0):M(1,p,k,g,0);d=d[3][0];k=/([a-z][-a-z0-9]*)(?:\\s*=\\s*("[^"]*"|\'[^\']*\'|[^\\s"\'=<>`]+))?/gi;for(var q;g=k.exec(d);)p=g[1].toLowerCase(),q="undefined"!==
+typeof g[2]?g[2]:p,c&&c[v]&&c[v][p]&&(p=c[v][p]),/^["\']/.test(q)&&(q=q.substring(1,q.length-1)),g=l,q=Ab(q),g.b[p]=q}})},w:"<",x:/<(?:\\/((?:a(?:bbr)?|br?|code|d(?:[dlt]|el|iv)|em|hr|i(?:mg|ns)?|li|ol|pre|r(?:[bp]|tc?|uby)|s(?:pan|trong|u[bp])?|t(?:[dr]|able|body|foot|h(?:ead)?)|ul?))|((?:a(?:bbr)?|br?|code|d(?:[dlt]|el|iv)|em|hr|i(?:mg|ns)?|li|ol|pre|r(?:[bp]|tc?|uby)|s(?:pan|trong|u[bp])?|t(?:[dr]|able|body|foot|h(?:ead)?)|ul?))((?:\\s+[a-z][-a-z0-9]*(?:\\s*=\\s*(?:"[^"]*"|\'[^\']*\'|[^\\s"\'=<>`]+))?)*)\\s*\\/?)\\s*>/ig,
+y:5E4},HTMLEntities:{u:function(a,b){b.forEach(c=>{let d=c[0][0],l=Ab(d);l===d||32>l.charCodeAt(0)||(M(3,"HE",c[0][1],d.length,0).b["char"]=l)})},w:"&",x:/&(?:[a-z]+|#(?:[0-9]+|x[0-9a-f]+));/ig,y:5E4},Litedown:{u:function(a){function b(e){-1","\\u001b8":"[","\\u001b9":"\\\\","\\u001bA":"]","\\u001bB":"^",
+"\\u001bC":"_","\\u001bD":"`","\\u001bE":"~"}[h]}));return e}function c(e){return 0<" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".indexOf(e)}function d(e){a=a.substring(0,e)+"\\u0017"+a.substring(e+1)}function l(e,h){0$/.test(r)&&(r=r.replace(/^<(.+)>$/,"$1").replace(/\\\\>/g,">"));r=b(r);e.b[t]=r;
+""[\\\\\\]^_`~]/g,function(e){return{"\\\\!":"\\u001b0",\'\\\\"\':"\\u001b1","\\\\\'":"\\u001b2","\\\\(":"\\u001b3","\\\\)":"\\u001b4","\\\\*":"\\u001b5","\\\\<":"\\u001b6","\\\\>":"\\u001b7","\\\\[":"\\u001b8","\\\\\\\\":"\\u001b9","\\\\]":"\\u001bA","\\\\^":"\\u001bB","\\\\_":"\\u001bC","\\\\`":"\\u001bD","\\\\~":"\\u001bE"}[e]}));a+="\\n\\n\\u0017";(function(){function e(m,n){Hb(Qb("LIST",n,0),m.V);Hb(Qb("LI",n,0),m.I);m.Q&&m.J.forEach(u=>{u.flags&=-9})}function h(m,
+n){let u=m;for(;0<=--n;)u=u.replace(/^ *>!? ?/,"");return m.length-u.length}function t(m){let n=[],u=/>!?/g,y;for(;y=u.exec(m);)n.push(y[0]);return n}function r(){if(-1!==a.indexOf("-")||-1!==a.indexOf("="))for(var m,n=/^(?=[-=>])(?:>!? ?)*(?=[-=])(?:-+|=+) *$/gm;m=n.exec(a);){let u=m[0];m=m.index;let y=m-1;for(;0/g,"").length,K:"="===u[0]?"H1":"H2"}}}let f={};(function(){r();let m=[],n=0,u,y=4,z,N=!0,E=[],K=0,aa=!1,T=0,na,ia,
+R,kb,$b,U,P,lb,Sa,ja,ka,qa,ac=[],mb,Ta=/^(?:(?=[-*+\\d \\t>`~#_])((?: {0,3}>(?:(?!!)|!(?![^\\n>]*?!<)) ?)+)?([ \\t]+)?(\\* *\\* *\\*[* ]*$|- *- *-[- ]*$|_ *_ *_[_ ]*$)?((?:[-*+]|\\d+\\.)[ \\t]+(?=\\S))?[ \\t]*(#{1,6}[ \\t]+|```+[^`\\n]*$|~~~+[^~\\n]*$)?)?/gm;for(;mb=Ta.exec(a);)ac.push(mb),mb.index===Ta.lastIndex&&++Ta.lastIndex;ac.forEach(D=>{var ba=[];let V=D.index;var ra=D[0].length,Q;ja=R=0;ia=!N;U=a.indexOf("\\n",V);N=U===V+ra&&!D[3]&&!D[4]&&!D[5];ra||++Ta.lastIndex;na=N&&ia;D[1]&&(ba=t(D[1]),ja=ba.length,R=
+D[1].length,z&&"blockDepth"in z.b&&(ja=Math.min(ja,z.b.blockDepth),R=h(D[1],ja)),l(V,R));if(jan&&!N){aa=!0;do m.push(M(1,">!"===ba[n]?"SPOILER":"QUOTE",V,0,-999));while(ja>++n)}W=Q=0;if(D[2]&&!u){kb=D[2];$b=kb.length;do" "===kb[W]?++Q:Q=Q+4&-4;while(++W<$b&&Qz.j?(l(z.j,T-z.j),Hb(z,Qb("CODE",T,0,-1))):F(z),u=z=null),E.forEach(Ba=>{e(Ba,T)}),E=[],K=0,V&&d(V-1));if(Q>=y){if(z||!ia)R=
(D[1]||"").length+W,z||=M(1,"CODE",V+R,0,-999),D={}}else if(!z){ba=!!D[4];if(Q||ia||ba)if(ia&&!ba)P=K-1;else if(K)for(P=0;PE[P].P;)++P;else P=ba?0:-1;else P=-1;for(;P{Ba.Q=!1});y=4*(K+1)}if(D[5])if("#"===D[5][0])W=D[5].length,ba=V+ra-W,Q=/[ \\t]*#*[ \\t]*$/.exec(a.substring(V+ra,U))[0].length,ra=U-Q,O("H"+/#{1,6}/.exec(D[5])[0].length,ba,W,ra,Q),d(ba),d(U),ia&&(na=!0);else{if("`"===D[5][0]||"~"===D[5][0])ka=V+R,qa=U-ka,z&&D[5]===t?(Hb(z,Qb("CODE",ka,qa,-1)),Rb(T,ka-T),l(z.j,ka+qa-z.j),t=z=null):z||(z=M(1,"CODE",ka,qa,0),t=D[5].replace(/[^`~]+/,""),z.b.blockDepth=ja,Rb(ka+qa,1),D=D[5].replace(/^[`~\\s]*/,
-"").replace(/\\s+$/,""),""!==D&&(z.b.lang=D))}else D[3]&&!K&&"\\u0017"!==a[V+ra]?(M(3,"HR",V+R,ra-R,0),na=!0,d(U)):!f[U]||f[U].T!==ja||N||K||z||(O(f[U].K,V+R,0,f[U].N,f[U].M),d(f[U].N+f[U].M));na&&(M(3,"pb",T,0,0),d(T));N||(T=U);R&&Rb(V,R,1E3)})})()})();(function(){if(!(0>a.indexOf("]:")))for(var e,h=/^\\x1A* {0,3}\\[([^\\x17\\]]+)\\]: *([^[\\s\\x17]+ *(?:"[^\\x17]*?"|\'[^\\x17]*?\'|\\([^\\x17)]*\\))?) *(?=$|\\x17)\\n?/gm;e=h.exec(a);){Rb(e.index,e[0].length);let r=e[1].toLowerCase();w[r]||(u=!0,w[r]=e[2])}})();(function(){var e=
-a.indexOf("`");if(0>e)var h=[];else{h=/(`+)(\\s*)[^\\x17`]*/g;var r=0,q=[],f=a.replace(/\\x1BD/g,"\\\\`");for(h.lastIndex=e;e=h.exec(f);)q.push({j:e.index,k:e[1].length,R:r,Y:e[2].length,next:e.index+e[0].length}),r=e[0].length-e[0].replace(/\\s+$/,"").length;h=q}f=-1;for(r=h.length;++f!",/>![^\\x17]+?!]+?(?:>|\\x1B7)/g;for(;f=m.exec(a);){let n=b(f[0].replace(/\\x1B/g,"\\\\\\u001b")).replace(/^<(.+)>$/,"$1"),t=f.index,y=":"===f[1]?"URL":"EMAIL",z=y.toLowerCase();O(y,t,1,
-t+f[0].length-1,1).b[z]=n}}function r(){let f,m=/\\[(?:[^\\x17[\\]]|\\[[^\\x17[\\]]*\\])*\\]\\(( *(?:\\([^\\x17\\s()]*\\)|[^\\x17\\s)])*(?=[ )]) *(?:"[^\\x17]*?"|\'[^\\x17]*?\'|\\([^\\x17)]*\\))? *)\\)/g;for(;f=m.exec(a);){let n=f[1],t=f.index,y=3+n.length;e(t,t+f[0].length-y,y,n)}}function q(){let f={};for(var m,n=/\\[((?:[^\\x17[\\]]|\\[[^\\x17[\\]]*\\])*)\\]/g;m=n.exec(a);)f[m.index]=m[1].toLowerCase();let t;for(t in f){m=f[t];n=+t+2+m.length;let y=n-1,z=1;" "===a[n]&&++n;""?@[\\]^_`{}|~]+~?/g,/~\\([^\\x17()]+\\)/g);g("SUP","^",/\\^[^\\x17\\s!"#$%&\'()*+,\\-.\\/:;<=>?@[\\]^_`{}|~]+\\^?/g,/\\^\\([^\\x17()]+\\)/g);(function(){function e(z,N){var E=a.indexOf(z);if(-1!==E){z=[];let na=[],ia=a.indexOf("\\u0017",E);var K;for(N.lastIndex=E;K=N.exec(a);){E=K.index;let R=K[0].length;E>ia&&(na.push(z),z=[],ia=a.indexOf("\\u0017",E));var aa=E,T=
-R;if(K="_"===a.charAt(aa)&&1===T)K=0{var E=N[0];N=N[1];let K=!(-1<" \\n\\t".indexOf(a[E+N-1+1])),aa=0{let d=c[0][0];M(3,"MEDIA",c[0][1],d.length,-10).b.url=d})},w:"://",x:/\\bhttps?:\\/\\/[^["\'\\s]+/ig,y:5E4},PipeTables:{u:function(a){function b(w,e){k=e.j;e.G.split("|").forEach((h,r)=>{0]/g," ")}function l(w){return w.replace(/\\|/g,".")}let k,g=null,v,p,u=a;-1")&&(u=u.replace(/^(?:>!? ?)+/gm,d));-1{if(0>w.indexOf("|"))c();else{var e=w;let h=0;g||(g={o:[]},h=/^ */.exec(e)[0].length,e=e.substring(h));e=e.replace(/^( *)\\|/,"$1 ").replace(/\\|( *)$/," $1");g.o.push({G:e,j:k+h})}k+=1+w.length});c()})();(function(){let w=-1,e=p.length;for(;++w{Ba.Q=!1});y=4*(K+1)}if(D[5])if("#"===D[5][0])W=D[5].length,ba=V+ra-W,Q=/[ \\t]*#*[ \\t]*$/.exec(a.substring(V+ra,U))[0].length,ra=U-Q,O("H"+/#{1,6}/.exec(D[5])[0].length,ba,W,ra,Q),d(ba),d(U),ia&&(na=!0);else{if("`"===D[5][0]||"~"===D[5][0])ka=V+R,qa=U-ka,z&&D[5]===u?(Hb(z,Qb("CODE",ka,qa,-1)),Rb(T,ka-T),l(z.j,ka+qa-z.j),u=z=null):z||(z=M(1,"CODE",ka,qa,0),u=D[5].replace(/[^`~]+/,""),z.b.blockDepth=ja,Rb(ka+qa,1),D=D[5].replace(/^[`~\\s]*/,
+"").replace(/\\s+$/,""),""!==D&&(z.b.lang=D))}else D[3]&&!K&&"\\u0017"!==a[V+ra]?(M(3,"HR",V+R,ra-R,0),na=!0,d(U)):!f[U]||f[U].T!==ja||N||K||z||(O(f[U].K,V+R,0,f[U].N,f[U].M),d(f[U].N+f[U].M));na&&(M(3,"pb",T,0,0),d(T));N||(T=U);R&&Rb(V,R,1E3)})})()})();(function(){if(!(0>a.indexOf("]:")))for(var e,h=/^\\x1A* {0,3}\\[([^\\x17\\]]+)\\]: *([^[\\s\\x17]+ *(?:"[^\\x17]*?"|\'[^\\x17]*?\'|\\([^\\x17)]*\\))?) *(?=$|\\x17)\\n?/gm;e=h.exec(a);){Rb(e.index,e[0].length);let t=e[1].toLowerCase();w[t]||(q=!0,w[t]=e[2])}})();(function(){var e=
+a.indexOf("`");if(0>e)var h=[];else{h=/(`+)(\\s*)[^\\x17`]*/g;var t=0,r=[],f=a.replace(/\\x1BD/g,"\\\\`");for(h.lastIndex=e;e=h.exec(f);)r.push({j:e.index,k:e[1].length,R:t,Y:e[2].length,next:e.index+e[0].length}),t=e[0].length-e[0].replace(/\\s+$/,"").length;h=r}f=-1;for(t=h.length;++f!",/>![^\\x17]+?!]+?(?:>|\\x1B7)/g;for(;f=m.exec(a);){let n=b(f[0].replace(/\\x1B/g,"\\\\\\u001b")).replace(/^<(.+)>$/,"$1"),u=f.index,y=":"===f[1]?"URL":"EMAIL",z=y.toLowerCase();O(y,u,1,
+u+f[0].length-1,1).b[z]=n}}function t(){let f,m=/\\[(?:[^\\x17[\\]]|\\[[^\\x17[\\]]*\\])*\\]\\(( *(?:\\([^\\x17\\s()]*\\)|[^\\x17\\s)])*(?=[ )]) *(?:"[^\\x17]*?"|\'[^\\x17]*?\'|\\([^\\x17)]*\\))? *)\\)/g;for(;f=m.exec(a);){let n=f[1],u=f.index,y=3+n.length;e(u,u+f[0].length-y,y,n)}}function r(){let f={};for(var m,n=/\\[((?:[^\\x17[\\]]|\\[[^\\x17[\\]]*\\])*)\\]/g;m=n.exec(a);)f[m.index]=m[1].toLowerCase();let u;for(u in f){m=f[u];n=+u+2+m.length;let y=n-1,z=1;" "===a[n]&&++n;""?@[\\]^_`{}|~]+~?/g,/~\\([^\\x17()]+\\)/g);g("SUP","^",/\\^[^\\x17\\s!"#$%&\'()*+,\\-.\\/:;<=>?@[\\]^_`{}|~]+\\^?/g,/\\^\\([^\\x17()]+\\)/g);(function(){function e(z,N){var E=a.indexOf(z);if(-1!==E){z=[];let na=[],ia=a.indexOf("\\u0017",E);var K;for(N.lastIndex=E;K=N.exec(a);){E=K.index;let R=K[0].length;E>ia&&(na.push(z),z=[],ia=a.indexOf("\\u0017",E));var aa=E,T=
+R;if(K="_"===a.charAt(aa)&&1===T)K=0{var E=N[0];N=N[1];let K=!(-1<" \\n\\t".indexOf(a[E+N-1+1])),aa=0{let d=c[0][0];M(3,"MEDIA",c[0][1],d.length,-10).b.url=d})},w:"://",x:/\\bhttps?:\\/\\/[^["\'\\s]+/ig,y:5E4},PipeTables:{u:function(a){function b(w,e){k=e.j;e.G.split("|").forEach((h,t)=>{0]/g," ")}function l(w){return w.replace(/\\|/g,".")}let k,g=null,v,p,q=a;-1")&&(q=q.replace(/^(?:>!? ?)+/gm,d));-1{if(0>w.indexOf("|"))c();else{var e=w;let h=0;g||(g={o:[]},h=/^ */.exec(e)[0].length,e=e.substring(h));e=e.replace(/^( *)\\|/,"$1 ").replace(/\\|( *)$/," $1");g.o.push({G:e,j:k+h})}k+=1+w.length});c()})();(function(){let w=-1,e=p.length;for(;++w{let w=
-u[1],e=u[0].exec(g);e&&(p=!0,w.forEach((h,r)=>{""{let w=
+q[1],e=q[0].exec(g);e&&(p=!0,w.forEach((h,t)=>{""X.indexOf(d.w))){var l=[];if("undefined"!==typeof d.x&&"undefined"!==typeof d.y){let k=void 0;l=d.x;d=d.y;l.lastIndex=0;let g=[],v=0;for(;++v<=d&&(k=l.exec(X));){let p=k.index,u=[[k[0],p]],w=0;for(;++w<
-k.length;){let e=k[w];void 0===e?u.push(["",-1]):(u.push([e,X.indexOf(e,p)]),p+=e.length)}g.push(u)}l=g;if(!l.length)break a}(0,Sb[b].u)(X,l)}}Zb();bc(Vb,0,!0);do c=L,L=L.replace(/<([^ />]+)[^>]*><\\/\\1>/g,"");while(L!==c);L=L.replace(/<\\/i>/g,"");L=L.replace(/[\\x00-\\x08\\x0B-\\x1F\\uFFFE\\uFFFF]/g,"");L=L.replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,cc);b=Ob?"r":"t";c="<"+b;for(let k in Pb)c+=" xmlns:"+k+\'="urn:s9e:TextFormatter:\'+k+\'"\';L=c+">"+L+""+b+">";if(Wb!==a)throw"The parser has been reset during execution";
+function Yb(a){a=a.replace(/\\r\\n?/g,"\\n");a=a.replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\uFFFE\\uFFFF]/g,"");var b=C;b.r=[];delete b.A;delete b.l;Lb={};Mb={};Nb=0;I=null;Ob=!1;Pb={};J=[];L="";S=0;Z=[];Ub=!1;X=a;Vb=X.length;Xb=0;H=Tb;H.D=!1;++Wb;a=Wb;for(var c in Sb)if(!Sb[c].F)a:{b=c;var d=Sb[b];if(!(d.w&&0>X.indexOf(d.w))){var l=[];if("undefined"!==typeof d.x&&"undefined"!==typeof d.y){let k=void 0;l=d.x;d=d.y;l.lastIndex=0;let g=[],v=0;for(;++v<=d&&(k=l.exec(X));){let p=k.index,q=[[k[0],p]],w=0;for(;++w<
+k.length;){let e=k[w];void 0===e?q.push(["",-1]):(q.push([e,X.indexOf(e,p)]),p+=e.length)}g.push(q)}l=g;if(!l.length)break a}(0,Sb[b].u)(X,l)}}Zb();bc(Vb,0,!0);do c=L,L=L.replace(/<([^ />]+)[^>]*><\\/\\1>/g,"");while(L!==c);L=L.replace(/<\\/i>/g,"");L=L.replace(/[\\x00-\\x08\\x0B-\\x1F\\uFFFE\\uFFFF]/g,"");L=L.replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,cc);b=Ob?"r":"t";c="<"+b;for(let k in Pb)c+=" xmlns:"+k+\'="urn:s9e:TextFormatter:\'+k+\'"\';L=c+">"+L+""+b+">";if(Wb!==a)throw"The parser has been reset during execution";
1E4p>u?1:-1);l.forEach(p=>{L+=" "+p+\'="\'+Bb(v[p].toString()).replace(/\\n/g,"
")+\'"\'});L=3===a.l?d?L+(">"+k+""+b+">"):L+"/>":d?L+(">"+k+""):L+">"}else d&&(L+=""+k+""),L+=""+b+">";for(Xb=S=c+d;g&&Xb<
+function ec(a){Ob=!0;let b=a.name,c=a.j,d=a.k;var l=a.flags,k=0;let g=0;l&256&&(k=1,g=a.l&2?2:1);bc(c,k,!(a.l&1&&!(l&4)));k=d?Cb(X.substring(c,c+d)):"";if(a.l&1){l&4||fc(c);l=b.indexOf(":");0p>q?1:-1);l.forEach(p=>{L+=" "+p+\'="\'+Bb(v[p].toString()).replace(/\\n/g,"
")+\'"\'});L=3===a.l?d?L+(">"+k+""+b+">"):L+"/>":d?L+(">"+k+""):L+">"}else d&&(L+=""+k+""),L+=""+b+">";for(Xb=S=c+d;g&&Xb<
Vb&&"\\n"===X[Xb];)--g,++Xb}
function bc(a,b,c){c&&(H.flags&8?b=-1:c=!1);S>=a&&c&&gc();if(Xb>S){var d=Math.min(a,Xb);L+=X.substring(S,d);S=d;S>=a&&c&&gc()}if(H.flags&128)b=X.substring(S,a),/^[ \\n\\t]*$/.test(b)||(b=""+Cb(b)+""),L+=b,S=a,c&&gc();else{var l=a;for(d=0;b&&--l>=S;){let k=X[l];if(" "!==k&&"\\n"!==k&&"\\t"!==k)break;"\\n"===k&&--b;++d}a-=d;if(H.flags&8)for(H.D||(hc(a),a>S&&fc(a)),b=X.indexOf("\\n\\n",S);-1S&&(b=Cb(X.substring(S,a)),L+=b);c&&gc();d&&(L+=X.substring(a,
a+d));S=a+d}}function ic(a){let b=a.j;a=a.k;let c=X.substring(b,b+a);bc(b,0,!1);L+=""+Cb(c)+"";Ob=!0;S=b+a}function fc(a){!H.D&&H.flags&8&&(hc(a),S",H.D=!0))}function gc(){H.D&&(L+="
",H.D=!1)}function hc(a){for(;SS&&-1<" \\n\\t".indexOf(X[a-1]);)--a;return a}
@@ -96,15 +96,15 @@ function Zb(){if(Z.length){for(let a in Y)Lb[a]=0,Mb[a]=0;do{for(;Z.length;)Ub||
function mc(){H.flags&64&&!Kb(I,J[J.length-1])&&!(-1<"br i pb v".indexOf(I.name))&&F(I);var a=I.j,b=I.k;if(S>a&&!I.p){var c;if((c=I.H)&&0<=J.indexOf(c)){Hb(Qb(c.name,S,Math.max(0,a+b-S)),c);return}if("i"===I.name&&(a=a+b-S,0");else if("pb"===I.name)bc(I.j,0,!0);else if("v"===I.name)a=H.flags,H.flags=I.flags,bc(I.j+I.k,0,!1),H.flags=a;else if(I.l&1)if(a=I,b=a.name,c=Y[b],Mb[b]>=c.g)C.add("err",
"Tag limit exceeded",{tag:a,tagName:b,tagLimit:c.g}),F(a);else{var d=a,l=Y[d.name];C.l=d;for(var k=0;kNb)){a:{d=a;if(J.length){k=d.name;var g=Y[k];if(g.e.n){l=J[J.length-1];let v=l.name;if(g.e.n[v]){if(v!==k&&1E4>Nb){k=d.j+d.k;Z.length?(g=Z[Z.length-1],g=g.j):g=Vb+1;for(;k=c.f?(C.add("err","Nesting limit exceeded",{tag:a,tagName:b,nestingLimit:c.f}),F(a)):(c=Y[b].i,H.d[c>>3]&1<<(c&7)?(!(a.flags&1&&3!==a.l)||a.B||Z.length&&Kb(Z[Z.length-1],a)||(b=new Fb(3,b,a.j,a.k),Na(b,Jb(a)),b.flags=a.flags,a=b),a.flags&4096&&"\\n"===X[a.j+a.k]&&Rb(a.j+a.k,1),ec(a),oc(a)):(b={tag:a,tagName:b},0c)Eb("Skipping end tag with no start tag",{tag:a});else{var l=a.flags;b.forEach(p=>{l|=p.flags});var k=l&256,g=1E4>Nb,v=[];b.forEach(p=>{var u=p.name;g&&(p.flags&2?v.push(p):g=!1);let w=a.j;k&&(w=kc(w));u=new Fb(2,u,w,0);u.flags=p.flags;ec(u);qc()});ec(a);qc();if(b.length&&1E4>Nb){d=S;for(c=Z.length;0<=--c&&1E4>++Nb;){let p=Z[c];if(p.j>d||p.l&1)break;let u=b.length;for(;0<=--u&&1E4>
-++Nb;)if(Kb(p,b[u])){b.splice(u,1);v[u]&&v.splice(u,1);d=Math.max(d,p.j+p.k);break}}d>S&&ic(new Fb(3,"i",S,d-S))}v.forEach(p=>{let u=nc(p,S);(p=p.B)&&Hb(u,p)})}}}function qc(){let a=J.pop();--Lb[a.name];H=H.W}function oc(a){let b=a.name,c=a.flags,d=Y[b];++Mb[b];if(3!==a.l){var l=[];H.d.forEach((g,v)=>{c&512||(g=g&65280|g>>8);l.push(d.d[v]&g)});var k=c|H.flags&32;k&16&&(k&=-33);++Lb[b];J.push(a);H={W:H};H.d=l;H.flags=k}}function Qb(a,b,c,d){return M(2,a,b,c,d||0)}
+function pc(){var a=I;if(Lb[a.name]){for(var b=[],c=J.length;0<=--c;){var d=J[c];if(Kb(a,d))break;b.push(d);++Nb}if(0>c)Eb("Skipping end tag with no start tag",{tag:a});else{var l=a.flags;b.forEach(p=>{l|=p.flags});var k=l&256,g=1E4>Nb,v=[];b.forEach(p=>{var q=p.name;g&&(p.flags&2?v.push(p):g=!1);let w=a.j;k&&(w=kc(w));q=new Fb(2,q,w,0);q.flags=p.flags;ec(q);qc()});ec(a);qc();if(b.length&&1E4>Nb){d=S;for(c=Z.length;0<=--c&&1E4>++Nb;){let p=Z[c];if(p.j>d||p.l&1)break;let q=b.length;for(;0<=--q&&1E4>
+++Nb;)if(Kb(p,b[q])){b.splice(q,1);v[q]&&v.splice(q,1);d=Math.max(d,p.j+p.k);break}}d>S&&ic(new Fb(3,"i",S,d-S))}v.forEach(p=>{let q=nc(p,S);(p=p.B)&&Hb(q,p)})}}}function qc(){let a=J.pop();--Lb[a.name];H=H.W}function oc(a){let b=a.name,c=a.flags,d=Y[b];++Mb[b];if(3!==a.l){var l=[];H.d.forEach((g,v)=>{c&512||(g=g&65280|g>>8);l.push(d.d[v]&g)});var k=c|H.flags&32;k&16&&(k&=-33);++Lb[b];J.push(a);H={W:H};H.d=l;H.flags=k}}function Qb(a,b,c,d){return M(2,a,b,c,d||0)}
function Rb(a,b,c){return M(3,"i",a,Math.min(b,Vb-a),c||0)}function nc(a,b){b=M(a.l,a.name,b,0,a.r);Na(b,Jb(a));return b}
function M(a,b,c,d,l){a=new Fb(a,b,c,d,l||0);Y[b]&&(a.flags=Y[b].e.flags);if(!(Y[b]||-1<"br i pb v".indexOf(a.name))||0>d||0>c||c+d>Vb||/[\\uDC00-\\uDFFF]/.test(X.substring(c,c+1)+X.substring(c+d,c+d+1)))F(a);else if(Y[b]&&Y[b].F)C.add("warn","Tag is disabled",{tag:a,tagName:b}),F(a);else if(Ub){b=Z.length;for(c=rc(a);0rc(Z[b-1]);)Z[b]=Z[b-1],--b;Z[b]=a}else Z.push(a);return a}function O(a,b,c,d,l,k){d=Qb(a,d,l,-k||0);a=M(1,a,b,c,k||0);Hb(a,d);return a}
function lc(){let a={},b=[],c=Z.length;for(;0<=--c;){let d=Z[c],l=rc(d,c);b.push(l);a[l]=d}b.sort();c=b.length;for(Z=[];0<=--c;)Z.push(a[b[c]]);Ub=!0}function rc(a,b){let c=0<=a.r,d=a.r;c||(d+=1073741824);let l=0=
-r;)g.removeChild(p[u]),k=g;p=w-q;if(!(r>=p)){w=l.createDocumentFragment();u=r;do h=v[u],k=w.appendChild(h);while(u<--p);q?g.insertBefore(w,g.childNodes[r]):g.appendChild(w)}}function d(g,v){if(g.nodeName!==v.nodeName||g.nodeType!==v.nodeType)return!1;if(g instanceof HTMLElement&&v instanceof HTMLElement){if(!g.isEqualNode(v)){var p=g.attributes;let h=v.attributes;var u=h.length;let r=p.length,q=" "+g.getAttribute("data-s9e-livepreview-ignore-attrs")+" ";for(;0<=--r;){var w=p[r],e=w.namespaceURI;w=
-w.name;-1[^<]*<\\/[eis]>/g,""),l);let k=b;"undefined"!==typeof window&&"chrome"in
+window.s9e.TextFormatter={disablePlugin:function(a){Sb[a]&&(Sb[a].F=!0)},disableTag:function(a){Y[a]&&(dc(a).F=!0)},enablePlugin:function(a){Sb[a]&&(Sb[a].F=!1)},enableTag:function(a){Y[a]&&(dc(a).F=!1)},getLogger:function(){return C},parse:Yb,preview:function(a,b){function c(g,v){var p=g.childNodes;v=v.childNodes;var q=p.length,w=v.length;let e,h,t=0,r=0;for(;t=
+t;)g.removeChild(p[q]),k=g;p=w-r;if(!(t>=p)){w=l.createDocumentFragment();q=t;do h=v[q],k=w.appendChild(h);while(q<--p);r?g.insertBefore(w,g.childNodes[t]):g.appendChild(w)}}function d(g,v){if(g.nodeName!==v.nodeName||g.nodeType!==v.nodeType)return!1;if(g instanceof HTMLElement&&v instanceof HTMLElement){if(!g.isEqualNode(v)){var p=g.attributes;let h=v.attributes;var q=h.length;let t=p.length,r=" "+g.getAttribute("data-s9e-livepreview-ignore-attrs")+" ";for(;0<=--t;){var w=p[t],e=w.namespaceURI;w=
+w.name;-1[^<]*<\\/[eis]>/g,""),l);let k=b;"undefined"!==typeof window&&"chrome"in
window&&a.querySelectorAll("script").forEach(function(g){let v=document.createElement("script");for(let p of g.attributes)v.setAttribute(p.name,p.value);v.textContent=g.textContent;g.parentNode.replaceChild(v,g)});c(b,a);return k},registeredVars:Ra,setNestingLimit:function(a,b){Y[a]&&(dc(a).f=b)},setParameter:function(a,b){vc.setParameter(null,a,b)},setTagLimit:function(a,b){Y[a]&&(dc(a).g=b)}};})();';
}
diff --git a/src/Configurator/TemplateNormalizations/AbstractNormalization.php b/src/Configurator/TemplateNormalizations/AbstractNormalization.php
index 343739b98..8fbfe38b5 100644
--- a/src/Configurator/TemplateNormalizations/AbstractNormalization.php
+++ b/src/Configurator/TemplateNormalizations/AbstractNormalization.php
@@ -100,7 +100,7 @@ protected function normalizeAttribute(Attr $attribute): void
{
}
- protected function normalizeCdataSection(CdataSection $comment): void
+ protected function normalizeCdataSection(CdataSection $cdata): void
{
}
diff --git a/src/Configurator/TemplateNormalizations/InlineCDATA.php b/src/Configurator/TemplateNormalizations/InlineCDATA.php
index 6f8bb18e0..93d818acc 100644
--- a/src/Configurator/TemplateNormalizations/InlineCDATA.php
+++ b/src/Configurator/TemplateNormalizations/InlineCDATA.php
@@ -19,8 +19,8 @@ class InlineCDATA extends AbstractNormalization
/**
* {@inheritdoc}
*/
- protected function normalizeCdataSection(CdataSection $node): void
+ protected function normalizeCdataSection(CdataSection $cdata): void
{
- $node->replaceWith($this->createPolymorphicText($node->textContent));
+ $cdata->replaceWith($this->createPolymorphicText($cdata->textContent));
}
}
\ No newline at end of file
diff --git a/tests/Configurator/TemplateNormalizations/AbstractNormalizationTest.php b/tests/Configurator/TemplateNormalizations/AbstractNormalizationTest.php
index 4f00436de..ae0e02e39 100644
--- a/tests/Configurator/TemplateNormalizations/AbstractNormalizationTest.php
+++ b/tests/Configurator/TemplateNormalizations/AbstractNormalizationTest.php
@@ -21,7 +21,12 @@ protected function getMockNormalization($query)
{
return $this->getMockBuilder(__NAMESPACE__ . '\\TestNormalization')
->setConstructorArgs([$this, $query])
- ->onlyMethods(['normalizeAttribute', 'normalizeElement'])
+ ->onlyMethods([
+ 'normalizeAttribute',
+ 'normalizeCdataSection',
+ 'normalizeComment',
+ 'normalizeElement'
+ ])
->getMock();
}
@@ -69,7 +74,33 @@ public function testNothingHappensAttribute()
}
/**
- * @testdox Calls normalizeAttribute() if an XPath query returns a DOMElement
+ * @testdox Nothing happens if the normalization doesn't override any method but selects a CData node
+ * @doesNotPerformAssertions
+ */
+ public function testNothingHappensCDATA()
+ {
+ $template = $this->getTemplateElement();
+ $template->append($template->ownerDocument->createCDATASection('..'));
+
+ $normalization = $this->getNormalization('//text()');
+ $normalization->normalize($template);
+ }
+
+ /**
+ * @testdox Nothing happens if the normalization doesn't override any method but selects a comment node
+ * @doesNotPerformAssertions
+ */
+ public function testNothingHappensComment()
+ {
+ $template = $this->getTemplateElement();
+ $template->appendComment('..');
+
+ $normalization = $this->getNormalization('//comment()');
+ $normalization->normalize($template);
+ }
+
+ /**
+ * @testdox Calls normalizeAttribute() if an XPath query returns an attribute
*/
public function testCallsNormalizeAttribute()
{
@@ -82,7 +113,36 @@ public function testCallsNormalizeAttribute()
}
/**
- * @testdox Calls normalizeElement() if an XPath query returns a DOMElement
+ * @testdox Calls normalizeAttribute() if an XPath query returns a CDATA node
+ */
+ public function testCallsNormalizeCData()
+ {
+ $template = $this->getTemplateElement();
+ $template->append($template->ownerDocument->createCDATASection('..'));
+
+ $mock = $this->getMockNormalization('//text()');
+ $mock->expects($this->once())
+ ->method('normalizeCdataSection');
+ $mock->expects($this->never())
+ ->method('normalizeElement');
+ $mock->normalize($template);
+ }
+
+ /**
+ * @testdox Calls normalizeComment() if an XPath query returns a comment node
+ */
+ public function testCallsNormalizeComment()
+ {
+ $template = $this->getTemplateElement();
+ $template->appendComment('..');
+
+ $mock = $this->getMockNormalization('//comment()');
+ $mock->expects($this->once())->method('normalizeComment');
+ $mock->normalize($template);
+ }
+
+ /**
+ * @testdox Calls normalizeElement() if an XPath query returns an element
*/
public function testCallsNormalizeElement()
{