UNPKG

html5parser

Version:
3 lines (2 loc) 8.74 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Html5parser={})}(this,(function(e){"use strict";var t,a,n,r,o,i,u,l,s,d,c;function f(e){return{lower:e.toLowerCase().split("").map((function(e){return e.charCodeAt(0)})),upper:e.toUpperCase().split("").map((function(e){return e.charCodeAt(0)})),length:e.length}}e.SyntaxKind=void 0,(t=e.SyntaxKind||(e.SyntaxKind={})).Text="Text",t.Tag="Tag";var p=f("!doctype"),v=f("style"),b=f("script");function y(){return 32===l||10===l||9===l||9===l||13===l||12===l}function h(e){a=0,n=e,r=e.length,o=0,i=0,u=[],s=!1,d=!1,c=0}function g(e){for(h(e);i<r;){switch(l=n.charCodeAt(i),a){case 0:w();break;case 1:k();break;case 2:x();break;case 3:A();break;case 4:S();break;case 5:T();break;case 6:O();break;case 7:K();break;case 8:j();break;case 9:N();break;case 10:C();break;case 11:M();break;case 12:E();break;case 13:U();break;case 14:q();break;default:H()}i++}switch(a){case 0:case 1:case 4:case 5:case 6:case 7:case 11:case 12:case 13:m(0);break;case 2:m(1);break;case 3:break;case 8:m(1,12);break;case 9:i-o===p.length?m(1):(m(1,void 0,o+1),m(0));break;case 10:i-o==2?m(1):(m(1,void 0,o+1),m(0));break;case 14:m(3)}var t=u;return h(""),t}function m(e,t,r){void 0===t&&(t=a),void 0===r&&(r=i);var l=n.substring(o,r);1!==e&&3!==e||(l=l.toLowerCase()),1===e&&("script"===l?s=!0:"style"===l&&(d=!0)),3===e&&(s=d=!1),(0!==e&&4!==e||r!==o)&&u.push({type:e,start:o,end:r,value:l}),2===e||3===e?(o=r+1,a=0):(o=r,a=t)}function w(){60===l&&m(0,1)}function k(){s||d?47===l?(a=14,o=i+1):a=0:l>=97&&l<=122||l>=65&&l<=90?(a=2,o=i):47===l?(a=14,o=i+1):60===l?m(0):33===l?(a=8,o=i):63===l?(o=i,m(1,12)):a=0}function x(){y()?m(1,3):62===l?(m(1),m(2)):47===l&&m(1,7)}function A(){62===l?(m(4),m(2)):47===l?m(4,7):61===l?(m(4),m(5,void 0,i+1)):39===l?m(4,5):34===l?m(4,6):y()||m(4,4)}function S(){62===l?(m(6),m(2)):47===l?m(6,7):61===l?(m(6),m(5,3,i+1)):y()&&m(6,3)}function T(){39===l&&m(7,3,i+1)}function O(){34===l&&m(8,3,i+1)}function K(){62===l?m(2):(m(6,3),A())}function j(){switch(l){case 45:a=10;break;case 100:case 68:a=9;break;default:m(1,12)}}function N(){(c=i-o)===p.length?y()?m(1,3):H():62===l?(m(1,void 0,o+1),m(0),m(2)):p.lower[c]!==l&&p.upper[c]!==l&&m(1,12,o+1)}function C(){45===l?m(1,11,i+1):m(1,12,o+1)}function M(){45===l&&m(0,13)}function E(){62===l&&(m(0),m(2))}function U(){2===(c=i-o)?62===l?m(2):45===l?m(0,void 0,o+1):a=11:45!==l&&(a=11)}function q(){c=i-o,d?60===l?(o-=2,m(0,1)):c<v.length?v.lower[c]!==l&&v.upper[c]!==l&&(o-=2,a=0):62===l?m(3):y()||(o-=2,a=0):s?60===l?(o-=2,m(0,1)):c<b.length?b.lower[c]!==l&&b.upper[c]!==l&&(o-=2,a=0):62===l?m(3):y()||(o-=2,a=0):62===l&&m(3)}function H(){throw new SyntaxError('Unexpected token "'+n.charAt(i)+'" at '+i+" when parse "+a)}var z=function(){return(z=Object.assign||function(e){for(var t,a=1,n=arguments.length;a<n;a++)for(var r in t=arguments[a])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}).apply(this,arguments)};function L(e,t){return e.split(",").reduce((function(e,a){return e[a]=t,e}),Object.create(null))}var P,_,D,J,$,B,F,G,I,Q,R=L("area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr,!doctype,,!,!--",!0),V=L("li,option,select,textarea",!0);function W(t,a,n,r){if(r.enter&&r.enter(t,a,n),t.type===e.SyntaxKind.Tag&&Array.isArray(t.body))for(var o=0;o<t.body.length;o++)W(t.body[o],t,o,r);r.leave&&r.leave(t,a,n)}function X(e,t){for(var a=0;a<e.length;a++)W(e[a],void 0,a,t)}function Y(e,t){void 0===e?(_=0,D.length=0,G=""):(D=g(e),_=D.length,G=e),P=0,J=void 0,$=[],B=void 0,F=void 0,I=void 0,Q=t}function Z(t){J?t.type===e.SyntaxKind.Tag&&t.name===J.tag.name&&V[t.name]?(J=J.parent,Z(t)):J.tag.body&&(J.tag.end=t.end,J.tag.body.push(t)):$.push(t)}function ee(e){J={parent:J,tag:e},F=void 0}function te(t,a,n){return void 0===t&&(t=B.start),void 0===a&&(a=B.end),void 0===n&&(n=B.value),{start:t,end:a,value:n,type:e.SyntaxKind.Text}}function ae(){return{start:B.start,end:B.end,name:te(),value:void 0}}function ne(e){void 0===e&&(e=F),e.value+=B.value,e.end=B.end}function re(){void 0===I&&(I=G.split("\n").reduce((function(e,t){return e.push(t.length+1+e[e.length-1]),e}),[0]));var e=function(e,t){var a="function"==typeof Symbol&&e[Symbol.iterator];if(!a)return e;var n,r,o=a.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){r={error:e}}finally{try{n&&!n.done&&(a=o.return)&&a.call(o)}finally{if(r)throw r.error}}return i}(function(e,t){for(var a=NaN,n=NaN,r=1;r<e.length;r++)if(e[r]>t){a=r,n=t-e[r-1]+1;break}return[a,n]}(I,B.start),2),t=e[0],a=e[1];throw new Error('Unexpected token "'+B.value+"("+B.type+')" at ['+t+","+a+"]"+(J?" when parsing tag: "+JSON.stringify(J.tag.name)+".":""))}function oe(e){var t,a;e.attributeMap={};try{for(var n=function(e){var t="function"==typeof Symbol&&Symbol.iterator,a=t&&e[t],n=0;if(a)return a.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}(e.attributes),r=n.next();!r.done;r=n.next()){var o=r.value;e.attributeMap[o.name.value]=o}}catch(e){t={error:e}}finally{try{r&&!r.done&&(a=n.return)&&a.call(n)}finally{if(t)throw t.error}}}function ie(){var t=0,a=void 0,n={start:B.start-1,end:B.end,type:e.SyntaxKind.Tag,open:te(B.start-1),name:B.value,rawName:G.substring(B.start,B.end),attributes:[],attributeMap:void 0,body:null,close:null};if(Z(n),""===n.name||"!"===n.name||"!--"===n.name){if(n.open.value="<"+n.open.value,P===_)return;if(2!==(B=D[++P]).type)for(F=te(),n.body=[F];++P<_;){if(2===(B=D[P]).type){F=void 0;break}ne()}return n.close=te(B.start,B.end+1,B.value+">"),void(n.end=n.close.end)}for(;++P<_;){if(2===(B=D[P]).type){n.end=n.open.end=B.end+1,n.open.value=G.substring(n.open.start,n.open.end),""!==B.value||R[n.name]?n.body=void 0:(n.body=[],ee(n));break}0===t?4!==B.type&&(a=ae(),t=1,n.attributes.push(a)):1===t?4===B.type?t=2:5===B.type?t=3:ne(a.name):2===t?4!==B.type&&(5===B.type?t=3:(a=ae(),t=1,n.attributes.push(a))):3===t?4!==B.type&&(a.value={start:B.start,end:B.end,value:6===B.type?B.value:B.value.substr(1,B.value.length-2),quote:6===B.type?void 0:7===B.type?"'":'"'},6===B.type?t=4:(a.end=a.value.end,t=0)):4===B.type?(a.end=a.value.end,t=0):ne(a.value)}}function ue(){for(var e=J;e&&B.value.trim()!==e.tag.name;)e=e.parent;e&&(e.tag.close=te(B.start-2,B.end+1,G.substring(B.start-2,B.end+1)),e.tag.end=e.tag.close.end,e=e.parent,J=e)}function le(t,a){for(Y(t,z({setAttributeMap:!1},a));P<_;){switch((B=D[P]).type){case 0:F?ne(F):Z(F=te());break;case 1:F=void 0,ie();break;case 3:F=void 0,ue();break;default:re()}P++}var n=$;return(null==Q?void 0:Q.setAttributeMap)&&X(n,{enter:function(t){t.type===e.SyntaxKind.Tag&&oe(t)}}),Y(),n}var se={allowedTags:["a","abbr","address","area","article","aside","b","bdi","bdo","big","blockquote","br","button","caption","cite","code","col","colgroup","data","dd","del","dfn","div","dl","dt","em","figcaption","figure","footer","h1","h2","h3","h4","h5","h6","header","hgroup","hr","i","img","ins","kbd","label","li","main","map","ol","p","picture","pre","q","rp","rt","ruby","s","samp","section","small","span","strong","sub","summary","sup","table","tbody","td","tfoot","th","thead","time","tr","u","ul","var","wbr"],allowedAttrs:["style"],tagAllowedAttrs:{a:["href","target"],img:["src"],td:["rowspan","colspan"],th:["rowspan","colspan"],time:["datetime"],colgroup:["span"],col:["span"]},allowedUrl:/^(?:mailto|tel|https?|ftp|[^:]*[^a-z0-9.+-][^:]*):|^[^:]*$/i};function de(t,a,n){return t.map((function(t){if(t.type===e.SyntaxKind.Text)return t.value;if(-1===a.allowedTags.indexOf(t.name))return"";if(R[t.name]){if(void 0!==t.body)throw new Error('self closed tag "'+t.name+'" should not have body')}else if(!t.body||!t.close)throw new Error('tag "'+t.name+'" should have body and close');var r=t.attributes.filter((function(e){var n;return(a.allowedAttrs.indexOf(e.name.value)>-1||(null===(n=a.tagAllowedAttrs[t.name])||void 0===n?void 0:n.indexOf(e.name.value))>-1)&&(!e.value||("src"!==e.name.value&&"href"!==e.name.value||!!a.allowedUrl.test(e.value.value)))})).map((function(e){return n.substring(e.start,e.end)})).join(" "),o="<"+t.rawName+(r?" "+r:"")+">";return t.body?o+de(t.body,a,n)+"</"+t.rawName+">":o})).join("")}e.parse=le,e.safeHtml=function(e,t){void 0===t&&(t={});var a=z(z(z({},se),t),{tagAllowedAttrs:z(z({},se.tagAllowedAttrs),t.tagAllowedAttrs)});return de(le(e),a,e)},e.safeHtmlDefaultOptions=se,e.tokenize=g,e.walk=X,Object.defineProperty(e,"__esModule",{value:!0})})); //# sourceMappingURL=html5parser.umd.js.map