use ncname to implement QName
authoralexlamsl <alexlamsl@gmail.com>
Fri, 11 Mar 2016 09:14:03 +0000 (17:14 +0800)
committeralexlamsl <alexlamsl@gmail.com>
Fri, 11 Mar 2016 09:17:59 +0000 (17:17 +0800)
Gruntfile.js
assets/ncname-browser.js [new file with mode: 0644]
dist/htmlminifier.js
dist/htmlminifier.min.js
index.html
package.json
src/htmlparser.js
tests/index.html
tests/minifier.js

index f0d3226..176588c 100644 (file)
@@ -59,6 +59,9 @@ module.exports = function(grunt) {
       'clean-css': {
         command: 'npm run assets/clean-css'
       },
+      ncname: {
+        command: 'npm run assets/ncname'
+      },
       relateurl: {
         command: 'npm run assets/relateurl'
       },
@@ -102,6 +105,7 @@ module.exports = function(grunt) {
 
   grunt.registerTask('assets', [
     'exec:clean-css',
+    'exec:ncname',
     'exec:relateurl',
     'exec:uglify-js'
   ]);
diff --git a/assets/ncname-browser.js b/assets/ncname-browser.js
new file mode 100644 (file)
index 0000000..7b586fb
--- /dev/null
@@ -0,0 +1 @@
+!function(u){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=u();else if("function"==typeof define&&define.amd)define([],u);else{var A;A="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,A.NCName=u()}}(function(){return function u(A,B,E){function C(D,e){if(!B[D]){if(!A[D]){var n="function"==typeof require&&require;if(!e&&n)return n(D,!0);if(F)return F(D,!0);var r=new Error("Cannot find module '"+D+"'");throw r.code="MODULE_NOT_FOUND",r}var t=B[D]={exports:{}};A[D][0].call(t.exports,function(u){var B=A[D][1][u];return C(B?B:u)},t,t.exports,u,A,B,E)}return B[D].exports}for(var F="function"==typeof require&&require,D=0;D<E.length;D++)C(E[D]);return C}({1:[function(u,A,B){"use strict";function E(u){return u.source.slice(1,-1)}var C=u("xml-char-classes");A.exports=new RegExp("^["+E(C.letter)+"_]["+E(C.letter)+E(C.digit)+"\\.\\-_"+E(C.combiningChar)+E(C.extender)+"]*$")},{"xml-char-classes":2}],2:[function(u,A,B){B.baseChar=/[A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\u0131\u0134-\u013E\u0141-\u0148\u014A-\u017E\u0180-\u01C3\u01CD-\u01F0\u01F4\u01F5\u01FA-\u0217\u0250-\u02A8\u02BB-\u02C1\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03D6\u03DA\u03DC\u03DE\u03E0\u03E2-\u03F3\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E-\u0481\u0490-\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0-\u04EB\u04EE-\u04F5\u04F8\u04F9\u0531-\u0556\u0559\u0561-\u0586\u05D0-\u05EA\u05F0-\u05F2\u0621-\u063A\u0641-\u064A\u0671-\u06B7\u06BA-\u06BE\u06C0-\u06CE\u06D0-\u06D3\u06D5\u06E5\u06E6\u0905-\u0939\u093D\u0958-\u0961\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8B\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AE0\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B36-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CDE\u0CE0\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D60\u0D61\u0E01-\u0E2E\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0F40-\u0F47\u0F49-\u0F69\u10A0-\u10C5\u10D0-\u10F6\u1100\u1102\u1103\u1105-\u1107\u1109\u110B\u110C\u110E-\u1112\u113C\u113E\u1140\u114C\u114E\u1150\u1154\u1155\u1159\u115F-\u1161\u1163\u1165\u1167\u1169\u116D\u116E\u1172\u1173\u1175\u119E\u11A8\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BC-\u11C2\u11EB\u11F0\u11F9\u1E00-\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2126\u212A\u212B\u212E\u2180-\u2182\u3041-\u3094\u30A1-\u30FA\u3105-\u312C\uAC00-\uD7A3]/,B.ideographic=/[\u3007\u3021-\u3029\u4E00-\u9FA5]/,B.letter=/[A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\u0131\u0134-\u013E\u0141-\u0148\u014A-\u017E\u0180-\u01C3\u01CD-\u01F0\u01F4\u01F5\u01FA-\u0217\u0250-\u02A8\u02BB-\u02C1\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03D6\u03DA\u03DC\u03DE\u03E0\u03E2-\u03F3\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E-\u0481\u0490-\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0-\u04EB\u04EE-\u04F5\u04F8\u04F9\u0531-\u0556\u0559\u0561-\u0586\u05D0-\u05EA\u05F0-\u05F2\u0621-\u063A\u0641-\u064A\u0671-\u06B7\u06BA-\u06BE\u06C0-\u06CE\u06D0-\u06D3\u06D5\u06E5\u06E6\u0905-\u0939\u093D\u0958-\u0961\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8B\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AE0\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B36-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CDE\u0CE0\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D60\u0D61\u0E01-\u0E2E\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0F40-\u0F47\u0F49-\u0F69\u10A0-\u10C5\u10D0-\u10F6\u1100\u1102\u1103\u1105-\u1107\u1109\u110B\u110C\u110E-\u1112\u113C\u113E\u1140\u114C\u114E\u1150\u1154\u1155\u1159\u115F-\u1161\u1163\u1165\u1167\u1169\u116D\u116E\u1172\u1173\u1175\u119E\u11A8\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BC-\u11C2\u11EB\u11F0\u11F9\u1E00-\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2126\u212A\u212B\u212E\u2180-\u2182\u3007\u3021-\u3029\u3041-\u3094\u30A1-\u30FA\u3105-\u312C\u4E00-\u9FA5\uAC00-\uD7A3]/,B.combiningChar=/[\u0300-\u0345\u0360\u0361\u0483-\u0486\u0591-\u05A1\u05A3-\u05B9\u05BB-\u05BD\u05BF\u05C1\u05C2\u05C4\u064B-\u0652\u0670\u06D6-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0901-\u0903\u093C\u093E-\u094D\u0951-\u0954\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A02\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A70\u0A71\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0B01-\u0B03\u0B3C\u0B3E-\u0B43\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B82\u0B83\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C01-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C82\u0C83\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0D02\u0D03\u0D3E-\u0D43\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86-\u0F8B\u0F90-\u0F95\u0F97\u0F99-\u0FAD\u0FB1-\u0FB7\u0FB9\u20D0-\u20DC\u20E1\u302A-\u302F\u3099\u309A]/,B.digit=/[0-9\u0660-\u0669\u06F0-\u06F9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE7-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29]/,B.extender=/[\xB7\u02D0\u02D1\u0387\u0640\u0E46\u0EC6\u3005\u3031-\u3035\u309D\u309E\u30FC-\u30FE]/},{}]},{},[1])(1)});
\ No newline at end of file
index 4a253ef..820bbc0 100644 (file)
         // attr value, no quotes
         /([^\s"'=<>`]+)/.source
       ],
-      startTagOpen = /^<([:A-Za-z_][:\w\-\.]*)/,
+      // https://www.w3.org/TR/1999/REC-xml-names-19990114/#NT-QName
+      qnameCapture = (function() {
+        var ncname;
+        if (typeof require === 'function') {
+          ncname = require('ncname');
+        }
+        else {
+          ncname = global.NCName;
+        }
+        if (ncname) {
+          ncname = ncname.source.slice(1, -1);
+        }
+        else {
+          ncname = '[:A-Za-z_][:\\w\\-\\.]*';
+        }
+        return '((?:' + ncname + '\\:)?' + ncname + ')';
+      })(),
+      startTagOpen = new RegExp('^<' + qnameCapture),
       startTagClose = /^\s*(\/?)>/,
-      endTag = /^<\/([:A-Za-z_][:\w\-\.]*)[^>]*>/,
+      endTag = new RegExp('^<\\/' + qnameCapture + '[^>]*>'),
       doctype = /^<!DOCTYPE [^>]+>/i;
 
   var IS_REGEX_CAPTURING_BROKEN = false;
index b676984..040f845 100644 (file)
@@ -3,4 +3,4 @@
  * Copyright 2010-2016 Juriy "kangax" Zaytsev
  * Licensed under the MIT license
  */
-!function(a){"use strict";function b(a){var b=e.source+"(?:\\s*("+c(a)+")\\s*(?:"+h.join("|")+"))?";if(a.customAttrSurround){for(var d=[],f=a.customAttrSurround.length-1;f>=0;f--)d[f]="(?:("+a.customAttrSurround[f][0].source+")\\s*"+b+"\\s*("+a.customAttrSurround[f][1].source+"))";d.push("(?:"+b+")"),b="(?:"+d.join("|")+")"}return new RegExp("^\\s*"+b)}function c(a){return g.concat(a.customAttrAssign||[]).map(function(a){return"(?:"+a.source+")"}).join("|")}function d(a){for(var b={},c=a.split(","),d=0;d<c.length;d++)b[c[d]]=!0,b[c[d].toUpperCase()]=!0;return b}var e=/([^\s"'<>\/=]+)/,f=/=/,g=[f],h=[/"([^"]*)"+/.source,/'([^']*)'+/.source,/([^\s"'=<>`]+)/.source],i=/^<([:A-Za-z_][:\w\-\.]*)/,j=/^\s*(\/?)>/,k=/^<\/([:A-Za-z_][:\w\-\.]*)[^>]*>/,l=/^<!DOCTYPE [^>]+>/i,m=!1;"x".replace(/x(.)?/g,function(a,b){m=""===b});var n=d("area,base,basefont,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),o=d("a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,noscript,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,svg,textarea,tt,u,var"),p=d("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),q=d("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"),r=d("script,style"),s=d("abbr,b,bdi,bdo,button,cite,code,data,dfn,em,h1,h2,h3,h4,h5,h6,i,kbd,label,legend,mark,meter,output,p,pre,progress,q,rp,rt,s,samp,small,span,strong,sub,sup,time,u,var"),t=d("a,abbr,area,audio,b,bdi,bdo,br,button,canvas,cite,code,data,datalist,del,dfn,em,embed,i,iframe,img,input,ins,kbd,keygen,label,link,main,map,mark,math,menu,meter,nav,noscript,object,ol,output,p,picture,pre,progress,q,ruby,s,samp,script,section,select,small,span,strong,sub,sup,svg,table,template,textarea,time,u,ul,var,video,wbr"),u={},v=a.HTMLParser=function(a,c){function d(a){var b=a.match(i);if(b){var c={tagName:b[1],attrs:[]};a=a.slice(b[0].length);for(var d,e;!(d=a.match(j))&&(e=a.match(y));)a=a.slice(e[0].length),c.attrs.push(e);if(d)return c.unarySlash=d[1],c.rest=a.slice(d[0].length),c}}function e(a){var b=a.tagName,d=a.unarySlash;if(c.html5&&g&&s[g]&&!t[b]&&f("",g),!c.html5)for(;g&&o[g];)f("",g);p[b]&&g===b&&f("",b);var e=n[b]||"html"===b&&"head"===g||!!d,h=a.attrs.map(function(a){var b,d,e,f,g,h,i,j=7;m&&-1===a[0].indexOf('""')&&(""===a[3]&&(a[3]=void 0),""===a[4]&&(a[4]=void 0),""===a[5]&&(a[5]=void 0));var k=1;if(c.customAttrSurround)for(var l=0,n=c.customAttrSurround.length;n>l;l++,k+=j)if(b=a[k+1],h=a[k+2],b){e=a[k+3],d=e||a[k+4]||a[k+5],i=e?'"':d?"'":"",f=a[k],g=a[k+6];break}return!b&&(b=a[k])&&(h=a[k+1],e=a[k+2],d=e||a[k+3]||a[k+4],i=e?'"':d?"'":""),void 0===d&&(d=q[b]?b:e),{name:b,value:d,customAssign:h||"=",customOpen:f||"",customClose:g||"",quote:i||""}});e||(x.push({tag:b,attrs:h}),g=b,d=""),c.start&&c.start(b,h,e,d)}function f(a,b){var d;if(b){var e=b.toLowerCase();for(d=x.length-1;d>=0&&x[d].tag.toLowerCase()!==e;d--);}else d=0;if(d>=0){for(var f=x.length-1;f>=d;f--)c.end&&c.end(x[f].tag,x[f].attrs,f>d||!a);x.length=d,g=d&&x[d-1].tag}}for(var g,h,v,w,x=[],y=b(c);a;){if(h=a,g&&r[g]){var z=g.toLowerCase(),A=u[z]||(u[z]=new RegExp("([\\s\\S]*?)</"+z+"[^>]*>","i"));a=a.replace(A,function(a,b){return"script"!==z&&"style"!==z&&"noscript"!==z&&(b=b.replace(/<!--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)\]\]>/g,"$1")),c.chars&&c.chars(b),""}),f("</"+z+">",z)}else{var B=a.indexOf("<");if(0===B){if(/^<!--/.test(a)){var C=a.indexOf("-->");if(C>=0){c.comment&&c.comment(a.substring(4,C)),a=a.substring(C+3),v="";continue}}if(/^<!\[/.test(a)){var D=a.indexOf("]>");if(D>=0){c.comment&&c.comment(a.substring(2,D+1),!0),a=a.substring(D+2),v="";continue}}var E=a.match(l);if(E){c.doctype&&c.doctype(E[0]),a=a.substring(E[0].length),v="";continue}var F=a.match(k);if(F){a=a.substring(F[0].length),F[0].replace(k,f),v="/"+F[1].toLowerCase();continue}var G=d(a);if(G){a=G.rest,e(G),v=G.tagName.toLowerCase();continue}}var H;B>=0?(H=a.substring(0,B),a=a.substring(B)):(H=a,a="");var I=d(a);I?w=I.tagName:(I=a.match(k),w=I?"/"+I[1]:""),c.chars&&c.chars(H,v,w),v=""}if(a===h)throw"Parse Error: "+a}c.partialMarkup||f()};a.HTMLtoXML=function(a){var b="";return new v(a,{start:function(a,c,d){b+="<"+a;for(var e=0;e<c.length;e++)b+=" "+c[e].name+'="'+(c[e].value||"").replace(/"/g,"&#34;")+'"';b+=(d?"/":"")+">"},end:function(a){b+="</"+a+">"},chars:function(a){b+=a},comment:function(a){b+="<!--"+a+"-->"},ignore:function(a){b+=a}}),b},a.HTMLtoDOM=function(a,b){var c=d("html,head,body,title"),e={link:"head",base:"head"};b?b=b.ownerDocument||b.getOwnerDocument&&b.getOwnerDocument()||b:"undefined"!=typeof DOMDocument?b=new DOMDocument:"undefined"!=typeof document&&document.implementation&&document.implementation.createDocument?b=document.implementation.createDocument("","",null):"undefined"!=typeof ActiveX&&(b=new ActiveXObject("Msxml.DOMDocument"));var f=[],g=b.documentElement||b.getDocumentElement&&b.getDocumentElement();if(!g&&b.createElement&&!function(){var a=b.createElement("html"),c=b.createElement("head");c.appendChild(b.createElement("title")),a.appendChild(c),a.appendChild(b.createElement("body")),b.appendChild(a)}(),b.getElementsByTagName)for(var h in c)c[h]=b.getElementsByTagName(h)[0];var i=c.body;return new v(a,{start:function(a,d,g){if(c[a])return void(i=c[a]);var h=b.createElement(a);for(var j in d)h.setAttribute(d[j].name,d[j].value);e[a]&&"boolean"!=typeof c[e[a]]?c[e[a]].appendChild(h):i&&i.appendChild&&i.appendChild(h),g||(f.push(h),i=h)},end:function(){f.length-=1,i=f[f.length-1]},chars:function(a){i.appendChild(b.createTextNode(a))},comment:function(){},ignore:function(){}}),b}}("undefined"==typeof exports?this:exports),function(a){"use strict";function b(a){return a?a.replace(/[\t\n\r ]+/g," "):a}function c(a){var b={};return a.forEach(function(a){b[a]=1}),function(a){return 1===b[a]}}function d(a){return c(a.split(/,/))}function e(a,c,d,e,f){var g="",h="";return c.preserveLineBreaks&&(a=a.replace(/^[\t ]*[\n\r][\t\n\r ]*/,function(){return g="\n",""}).replace(/[\t\n\r ]*[\n\r][\t ]*$/,function(){return h="\n",""})),d&&(a=a.replace(/^\s+/,!g&&c.conservativeCollapse?" ":"")),e&&(a=a.replace(/\s+$/,!h&&c.conservativeCollapse?" ":"")),f&&(a=b(a)),g+a+h}function f(a,b,c,d){var f=b&&!W(b);f&&!d.collapseInlineTagWhitespace&&(f="/"===b.charAt(0)?!U(b.slice(1)):!V(b));var g=c&&!W(c);return g&&!d.collapseInlineTagWhitespace&&(g="/"===c.charAt(0)?!V(c.slice(1)):!U(c)),e(a,d,f,g,b&&c)}function g(a){return/^\[if\s[^\]]+\]|\[endif\]$/.test(a)}function h(a,b){if(/^!/.test(a))return!0;if(b.ignoreCustomComments)for(var c=0,d=b.ignoreCustomComments.length;d>c;c++)if(b.ignoreCustomComments[c].test(a))return!0;return!1}function i(a,b){var c=b.customEventAttributes;if(c){for(var d=c.length;d--;)if(c[d].test(a))return!0;return!1}return/^on[a-z]{3,}$/.test(a)}function j(a){return/^[^\x20\t\n\f\r"'`=<>]+$/.test(a)}function k(a,b){for(var c=a.length;c--;)if(a[c].name.toLowerCase()===b)return!0;return!1}function l(a,b,c,d){return c=c?T(c.toLowerCase()):"","script"===a&&"language"===b&&"javascript"===c||"form"===a&&"method"===b&&"get"===c||"input"===a&&"type"===b&&"text"===c||"script"===a&&"charset"===b&&!k(d,"src")||"a"===a&&"name"===b&&k(d,"id")||"area"===a&&"shape"===b&&"rect"===c}function m(a,b,c){return"script"===a&&"type"===b&&X(T(c.toLowerCase()))}function n(a,b){if("script"!==a)return!1;for(var c=0,d=b.length;d>c;c++){var e=b[c].name.toLowerCase();if("type"===e){var f=T(b[c].value.split(/;/,2)[0]).toLowerCase();return""===f||X(f)}}return!0}function o(a,b,c){return("style"===a||"link"===a)&&"type"===b&&"text/css"===T(c.toLowerCase())}function p(a,b){return Y(a)||"draggable"===a&&!Z(b)}function q(a,b){return/^(?:a|area|link|base)$/.test(b)&&"href"===a||"img"===b&&/^(?:src|longdesc|usemap)$/.test(a)||"object"===b&&/^(?:classid|codebase|data|usemap)$/.test(a)||"q"===b&&"cite"===a||"blockquote"===b&&"cite"===a||("ins"===b||"del"===b)&&"cite"===a||"form"===b&&"action"===a||"input"===b&&("src"===a||"usemap"===a)||"head"===b&&"profile"===a||"script"===b&&("src"===a||"for"===a)}function r(a,b){return/^(?:a|area|object|button)$/.test(b)&&"tabindex"===a||"input"===b&&("maxlength"===a||"tabindex"===a)||"select"===b&&("size"===a||"tabindex"===a)||"textarea"===b&&/^(?:rows|cols|tabindex)$/.test(a)||"colgroup"===b&&"span"===a||"col"===b&&"span"===a||("th"===b||"td"===b)&&("rowspan"===a||"colspan"===a)}function s(a,b){if("link"!==a)return!1;for(var c=0,d=b.length;d>c;c++)if("rel"===b[c].name&&"canonical"===b[c].value)return!0}function t(a,c,d,e,f){if(d&&i(c,e)){if(d=T(d).replace(/^javascript:\s*/i,"").replace(/\s*;$/,""),e.minifyJS){var g=M($+d+_,e.minifyJS);return g.slice($.length,-_.length)}return d}return"class"===c?b(T(d)):q(c,a)?(d=T(d),e.minifyURLs&&!s(a,f)?L(d,e.minifyURLs):d):r(c,a)?T(d):"style"===c?(d=T(d),d&&(d=d.replace(/\s*;\s*$/,"")),e.minifyCSS?N(d,e.minifyCSS,!0):d):(u(a,f)&&"content"===c?d=d.replace(/\s+/g,"").replace(/[0-9]+\.[0-9]+/g,function(a){return(+a).toString()}):d&&e.customAttrCollapse&&e.customAttrCollapse.test(c)?d=d.replace(/\n+|\r+|\s{2,}/g,""):"script"===a&&"type"===c&&(d=T(d.replace(/\s*;\s*/g,";"))),d)}function u(a,b){if("meta"!==a)return!1;for(var c=0,d=b.length;d>c;c++)if("name"===b[c].name&&"viewport"===b[c].value)return!0}function v(a){return"*{"+a+"}"}function w(a){var b=a.match(/^\*\{([\s\S]*)\}$/m);return b&&b[1]?b[1]:a}function x(a,b){return a.replace(/^(\[if\s[^\]]+\]>)([\s\S]*?)(<!\[endif\])$/,function(a,c,d,e){return c+P(d,b,!0)+e})}function y(a){return a.replace(/^(?:\s*\/\*\s*<!\[CDATA\[\s*\*\/|\s*\/\/\s*<!\[CDATA\[.*)/,"").replace(/(?:\/\*\s*\]\]>\s*\*\/|\/\/\s*\]\]>)\s*$/,"")}function z(a,b,c){for(var d=0,e=c.length;e>d;d++)if("type"===c[d].name.toLowerCase()&&b.processScripts.indexOf(c[d].value)>-1)return P(a,b);return a}function A(a,b){return a.replace(aa[b],"").replace(ba[b],"")}function B(a,b){switch(a){case"html":case"head":return!0;case"body":return!ea(b);case"colgroup":return"col"===b;case"tbody":return"tr"===b}return!1}function C(a,b){switch(b){case"colgroup":return"colgroup"===a;case"tbody":return ma(a)}return!1}function D(a,b){switch(a){case"html":case"head":case"body":case"colgroup":case"caption":return!0;case"li":case"optgroup":case"tr":return b===a;case"dt":case"dd":return fa(b);case"p":return ga(b);case"rb":case"rt":case"rp":return ia(b);case"rtc":return ja(b);case"option":return ka(b);case"thead":case"tbody":return la(b);case"tfoot":return"tbody"===b;case"td":case"th":return na(b)}return!1}function E(a,b,c){var d=!c||/^\s*$/.test(c);return d?"input"===a&&"value"===b||ta.test(b):!1}function F(a,b){for(var c=b.length-1;c>=0;c--)if(b[c].name===a)return!0;return!1}function G(a,b){switch(a){case"textarea":return!1;case"audio":case"script":case"video":if(F("src",b))return!1;break;case"iframe":if(F("src",b)||F("srcdoc",b))return!1;break;case"object":if(F("data",b))return!1;break;case"applet":if(F("code",b))return!1}return!0}function H(a){return!/^(?:script|style|pre|textarea)$/.test(a)}function I(a){return!/^(?:pre|textarea)$/.test(a)}function J(a,b,c,d,e,f,g){var h,i,k=f.caseSensitive?a.name:a.name.toLowerCase(),n=a.value,q=a.quote;if(f.removeRedundantAttributes&&l(c,k,n,b)||f.removeScriptTypeAttributes&&m(c,k,n)||f.removeStyleLinkTypeAttributes&&o(c,k,n))return"";if(n=t(c,k,n,f,b),f.removeEmptyAttributes&&E(c,k,n))return"";if(void 0!==n&&!f.removeAttributeQuotes||!j(n)){if(!f.preventAttributesEscaping){if(void 0!==f.quoteCharacter)q="'"===f.quoteCharacter?"'":'"';else{var r=(n.match(/'/g)||[]).length,s=(n.match(/"/g)||[]).length;q=s>r?"'":'"'}n='"'===q?n.replace(/"/g,"&#34;"):n.replace(/'/g,"&#39;")}i=q+n+q,g||f.removeTagWhitespace||(i+=" ")}else i=!g||d||/\/$/.test(n)?n+" ":n;return void 0===n||f.collapseBooleanAttributes&&p(k.toLowerCase(),n.toLowerCase())?(h=k,g||(h+=" ")):h=k+a.customAssign+i,a.customOpen+h+a.customClose}function K(a){"includeAutoGeneratedTags"in a||(a.includeAutoGeneratedTags=!0);for(var b=["canCollapseWhitespace","canTrimWhitespace"],c=0,d=b.length;d>c;c++)a[b[c]]||(a[b[c]]=function(){return!1})}function L(b,c){"object"!=typeof c&&(c={});try{var d=a.RelateUrl;return"undefined"==typeof d&&"function"==typeof require&&(d=require("relateurl")),d&&d.relate?d.relate(b,c):b}catch(e){R(e)}return b}function M(b,c){"object"!=typeof c&&(c={}),c.fromString=!0;var d=c.output||{};d.inline_script=!0,c.output=d;try{var e=a.UglifyJS;if("undefined"==typeof e&&"function"==typeof require&&(e=require("uglify-js")),!e)return b;if(e.minify)return e.minify(b,c).code;if(e.parse){var f=e.parse(b);f.figure_out_scope();var g=e.Compressor(),h=f.transform(g);h.figure_out_scope(),h.compute_char_frequency(),c.mangle!==!1&&h.mangle_names();var i=e.OutputStream(c.output);return h.print(i),i.toString()}return b}catch(j){R(j)}return b}function N(b,c,d){"object"!=typeof c&&(c={}),"undefined"==typeof c.advanced&&(c.advanced=!1);try{var e=a.CleanCSS;"undefined"==typeof e&&"function"==typeof require&&(e=require("clean-css"));var f=new e(c);return d?w(f.minify(v(b)).styles):f.minify(b).styles}catch(g){R(g)}return b}function O(a){var b;do b=Math.random().toString(36).slice(2);while(~a.indexOf(b));return b}function P(a,c,d){function i(a,b){return H(a)||c.canCollapseWhitespace(a,b)}function j(a,b){return I(a)||c.canTrimWhitespace(a,b)}function k(){for(var a=t.length-1;a>0&&!/^<[^\/!]/.test(t[a]);)a--;t.length=Math.max(0,a)}function l(){for(var a=t.length-1;a>0&&!/^<\//.test(t[a]);)a--;t.length=Math.max(0,a)}function m(a){var b;t.length>1&&/^(?:<!|$)/.test(t[t.length-1])&&/\s$/.test(t[t.length-2])?b=t.length-2:t.length>0&&/\s$/.test(t[t.length-1])&&(b=t.length-1),b>0&&(t[b]=t[b].replace(/\s+$/,function(b){return f(b,"comment",a,c)}))}c=c||{};var o=[];K(c),a=c.collapseWhitespace?T(a):a;var p,q,r,s,t=[],u="",v="",w=[],E=[],F=[],L="",P="",U=c.lint,W=Date.now(),X=[],Y=[];a=a.replace(/<!-- htmlmin:ignore -->([\s\S]*?)<!-- htmlmin:ignore -->/g,function(b,c){r||(r="<!--!"+O(a)+"-->");var d=r+X.length;return X.push(c),d});var Z=(c.ignoreCustomFragments||[/<%[\s\S]*?%>/,/<\?[\s\S]*?\?>/]).map(function(a){return a.source});if(Z.length){var $=new RegExp("\\s*(?:"+Z.join("|")+")+\\s*","g");a=a.replace($,function(b){s||(s=O(a));var c=s+Y.length;return Y.push(b),"      "+c+"   "})}new S(a,{partialMarkup:d,html5:"undefined"!=typeof c.html5?c.html5:!0,start:function(a,b,d,e){var f=a.toLowerCase();if("svg"===f){o.push(c);var g={};for(var h in c)g[h]=c[h];g.keepClosingSlash=!0,g.caseSensitive=!0,c=g}a=c.caseSensitive?a:f,v=a,p=a,V(a)||(u=""),q=!1,w=b;var n=c.removeOptionalTags;if(n){var r=sa(a);r&&B(L,a)&&k(),L="",r&&D(P,a)&&(l(),n=!C(P,a)),P=""}c.collapseWhitespace&&(E.length||m(a),j(a,b)||E.push(a),i(a,b)||F.push(a));var s="<"+a,x=e&&c.keepClosingSlash;t.push(s),U&&U.testElement(a);for(var y,z=[],A=!0,G=b.length;--G>=0;)U&&U.testAttribute(a,b[G].name.toLowerCase(),b[G].value),y=J(b[G],b,a,x,G,c,A),y&&(A=!1,z.unshift(y));z.length>0?(t.push(" "),t.push.apply(t,z)):n&&ca(a)&&(L=a),t.push(t.pop()+(x?"/":"")+">")},end:function(a,b,d){var e=a.toLowerCase();"svg"===e&&(c=o.pop()),a=c.caseSensitive?a:e,c.collapseWhitespace&&(E.length?a===E[E.length-1]&&E.pop():m("/"+a),F.length&&a===F[F.length-1]&&F.pop());var f=!1;a===v&&(v="",f=!q),c.removeOptionalTags&&(f&&oa(L)&&k(),L="",!sa(a)||!P||ra(P)||"p"===P&&ha(a)||l(),P=da(a)?a:""),c.removeEmptyElements&&f&&G(a,b)?(k(),L="",P=""):(!c.includeAutoGeneratedTags&&d||t.push("</"+a+">"),p="/"+a,V(a)||(u=""))},chars:function(a,d,g){if(d=""===d?"comment":d,g=""===g?"comment":g,c.collapseWhitespace){if(!E.length){if("comment"===d){var h=""===t[t.length-1];if(h&&(d=p),t.length>1&&(h||/ $/.test(u))){var i=t.length-2;t[i]=t[i].replace(/\s+$/,function(b){return a=b+a,""})}}if(d&&V("/"===d.charAt(0)?d.slice(1):d)&&(a=e(a,c,/(?:^|\s)$/.test(u))),a=d||g?f(a,d,g,c):T(a),!a&&/\s$/.test(u)&&d&&"/"===d.charAt(0))for(var m=t.length-2,o=d.slice(1);m>=0&&j(o);m--){var r=t[m],s=r.match(/^<\/([\w:-]+)>$/);if(s)o=s[1];else if(/>$/.test(r)||(t[m]=f(r,null,g,c)))break}}F.length||(a=d&&g||"html"===g?a:b(a))}"script"!==v&&"style"!==v||(c.removeCommentsFromCDATA&&(a=A(a,v)),c.removeCDATASectionsFromCDATA&&(a=y(a)),c.processScripts&&(a=z(a,c,w))),c.minifyJS&&n(v,w)&&(a=M(a,c.minifyJS),";"===a.charAt(a.length-1)&&(a=a.slice(0,-1))),"style"===v&&c.minifyCSS&&(a=N(a,c.minifyCSS)),c.removeOptionalTags&&a&&(("html"===L||"body"===L&&!/^\s/.test(a))&&k(),L="",(pa(P)||qa(P)&&!/^\s/.test(a))&&l(),P=""),p=/^\s*$/.test(a)?d:"comment",u+=a,a&&(q=!0),U&&U.testChars(a),t.push(a)},comment:function(a,b){var d=b?"<!":"<!--",e=b?">":"-->";a=g(a)?d+x(a,c)+e:c.removeComments?h(a,c)?"<!--"+a+"-->":"":d+a+e,c.removeOptionalTags&&a&&(L="",P=""),t.push(a)},doctype:function(a){t.push(c.useShortDoctype?"<!DOCTYPE html>":b(a))},customAttrAssign:c.customAttrAssign,customAttrSurround:c.customAttrSurround}),c.removeOptionalTags&&(oa(L)&&k(),P&&!ra(P)&&l());var _=Q(t,c);return s&&(_=_.replace(new RegExp("(\\s*)"+s+"([0-9]+)(\\s*)","g"),function(a,b,d,f){var g=Y[+d];return c.collapseWhitespace?("       "!==b&&(g=b+g),"        "!==f&&(g+=f),e(g,{preserveLineBreaks:c.preserveLineBreaks,conservativeCollapse:!0},/^\s/.test(g),/\s$/.test(g))):g})),r&&(_=_.replace(new RegExp(r+"([0-9]+)","g"),function(a,b){return X[+b]})),R("minified in: "+(Date.now()-W)+"ms"),_}function Q(a,b){var c,d=b.maxLineLength;if(d){for(var e,f=[],g="",h=0,i=a.length;i>h;h++)e=a[h],g.length+e.length<d?g+=e:(f.push(g.replace(/^\n/,"")),g=e);f.push(g),c=f.join("\n")}else c=a.join("");return b.collapseWhitespace?T(c):c}var R,S;R=a.console&&a.console.log?function(b){a.console.log(b)}:function(){},a.HTMLParser?S=a.HTMLParser:"function"==typeof require&&(S=require("./htmlparser").HTMLParser);var T=function(a){return"string"!=typeof a?a:a.replace(/^\s+/,"").replace(/\s+$/,"")};String.prototype.trim&&(T=function(a){return"string"!=typeof a?a:a.trim()});var U=d("a,abbr,acronym,b,bdi,bdo,big,button,cite,code,del,dfn,em,font,i,ins,kbd,mark,math,q,rt,rp,s,samp,small,span,strike,strong,sub,sup,svg,time,tt,u,var"),V=d("a,abbr,acronym,b,big,del,em,font,i,ins,kbd,mark,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var"),W=d("comment,img,input"),X=c(["text/javascript","text/ecmascript","text/jscript","application/javascript","application/x-javascript","application/ecmascript"]),Y=d("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),Z=d("true,false"),$="!function(){",_="}();",aa={script:/^\s*(?:\/\/)?\s*<!--.*\n?/,style:/^\s*<!--\s*/},ba={script:/\s*(?:\/\/)?\s*-->\s*$/,style:/\s*-->\s*$/},ca=d("html,head,body,colgroup,tbody"),da=d("html,head,body,li,dt,dd,p,rb,rt,rtc,rp,optgroup,option,colgroup,caption,thead,tbody,tfoot,tr,td,th"),ea=d("meta,link,script,style,template,noscript"),fa=d("dt,dd"),ga=d("address,article,aside,blockquote,details,div,dl,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,main,menu,nav,ol,p,pre,section,table,ul"),ha=d("a,audio,del,ins,map,noscript,video"),ia=d("rb,rt,rtc,rp"),ja=d("rb,rtc,rp"),ka=d("option,optgroup"),la=d("tbody,tfoot"),ma=d("thead,tbody,tfoot"),na=d("td,th"),oa=d("html,head,body"),pa=d("html,body"),qa=d("head,colgroup,caption"),ra=d("dt,thead"),sa=d("a,abbr,acronym,address,applet,area,article,aside,audio,b,base,basefont,bdi,bdo,bgsound,big,blink,blockquote,body,br,button,canvas,caption,center,cite,code,col,colgroup,command,content,data,datalist,dd,del,details,dfn,dialog,dir,div,dl,dt,element,em,embed,fieldset,figcaption,figure,font,footer,form,frame,frameset,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,i,iframe,image,img,input,ins,isindex,kbd,keygen,label,legend,li,link,listing,main,map,mark,marquee,menu,menuitem,meta,meter,multicol,nav,nobr,noembed,noframes,noscript,object,ol,optgroup,option,output,p,param,picture,plaintext,pre,progress,q,rp,rt,rtc,ruby,s,samp,script,section,select,shadow,small,source,spacer,span,strike,strong,style,sub,summary,sup,table,tbody,td,template,textarea,tfoot,th,thead,time,title,tr,track,tt,u,ul,var,video,wbr,xmp"),ta=new RegExp("^(?:class|id|style|title|lang|dir|on(?:focus|blur|change|click|dblclick|mouse(?:down|up|over|move|out)|key(?:press|down|up)))$");a.minify=function(a,b){return P(a,b)}}("undefined"==typeof exports?this:exports),function(a){"use strict";function b(a){return/^(?:big|small|hr|blink|marquee)$/.test(a)}function c(a){return/^(?:applet|basefont|center|dir|font|isindex|strike)$/.test(a)}function d(a){return/^on[a-z]+/.test(a)}function e(a){return"style"===a.toLowerCase()}function f(a,b){return"align"===b&&/^(?:caption|applet|iframe|img|imput|object|legend|table|hr|div|h[1-6]|p)$/.test(a)||"alink"===b&&"body"===a||"alt"===b&&"applet"===a||"archive"===b&&"applet"===a||"background"===b&&"body"===a||"bgcolor"===b&&/^(?:table|t[rdh]|body)$/.test(a)||"border"===b&&/^(?:img|object)$/.test(a)||"clear"===b&&"br"===a||"code"===b&&"applet"===a||"codebase"===b&&"applet"===a||"color"===b&&/^(?:base(?:font)?)$/.test(a)||"compact"===b&&/^(?:dir|[dou]l|menu)$/.test(a)||"face"===b&&/^base(?:font)?$/.test(a)||"height"===b&&/^(?:t[dh]|applet)$/.test(a)||"hspace"===b&&/^(?:applet|img|object)$/.test(a)||"language"===b&&"script"===a||"link"===b&&"body"===a||"name"===b&&"applet"===a||"noshade"===b&&"hr"===a||"nowrap"===b&&/^t[dh]$/.test(a)||"object"===b&&"applet"===a||"prompt"===b&&"isindex"===a||"size"===b&&/^(?:hr|font|basefont)$/.test(a)||"start"===b&&"ol"===a||"text"===b&&"body"===a||"type"===b&&/^(?:li|ol|ul)$/.test(a)||"value"===b&&"li"===a||"version"===b&&"html"===a||"vlink"===b&&"body"===a||"vspace"===b&&/^(?:applet|img|object)$/.test(a)||"width"===b&&/^(?:hr|td|th|applet|pre)$/.test(a)}function g(a,b){return"href"===a&&/^\s*javascript\s*:\s*void\s*(\s+0|\(\s*0\s*\))\s*$/i.test(b)}function h(){this.log=[],this._lastElement=null,this._isElementRepeated=!1}h.prototype.testElement=function(a){c(a)?this.log.push('Found <span class="deprecated-element">deprecated</span> <strong><code>&lt;'+a+"&gt;</code></strong> element"):b(a)?this.log.push('Found <span class="presentational-element">presentational</span> <strong><code>&lt;'+a+"&gt;</code></strong> element"):this.checkRepeatingElement(a)},h.prototype.checkRepeatingElement=function(a){"br"===a&&"br"===this._lastElement?this._isElementRepeated=!0:this._isElementRepeated&&(this._reportRepeatingElement(),this._isElementRepeated=!1),this._lastElement=a},h.prototype._reportRepeatingElement=function(){this.log.push("Found <code>&lt;br></code> sequence. Try replacing it with styling.")},h.prototype.testAttribute=function(a,b,c){d(b)?this.log.push('Found <span class="event-attribute">event attribute</span> (<strong>'+b+"</strong>) on <strong><code>&lt;"+a+"&gt;</code></strong> element."):f(a,b)?this.log.push('Found <span class="deprecated-attribute">deprecated</span> <strong>'+b+"</strong> attribute on <strong><code>&lt;"+a+"&gt;</code></strong> element."):e(b)?this.log.push('Found <span class="style-attribute">style attribute</span> on <strong><code>&lt;'+a+"&gt;</code></strong> element."):g(b,c)&&this.log.push('Found <span class="inaccessible-attribute">inaccessible attribute</span> (on <strong><code>&lt;'+a+"&gt;</code></strong> element).")},h.prototype.testChars=function(a){this._lastElement="",/(&nbsp;\s*){2,}/.test(a)&&this.log.push("Found repeating <strong><code>&amp;nbsp;</code></strong> sequence. Try replacing it with styling.")},h.prototype.test=function(a,b,c){this.testElement(a),this.testAttribute(a,b,c)},h.prototype.populate=function(a){if(this._isElementRepeated&&this._reportRepeatingElement(),this.log.length)if(a)a.innerHTML="<ol><li>"+this.log.join("<li>")+"</ol>";else{var b=" - "+this.log.join("\n - ").replace(/(<([^>]+)>)/gi,"").replace(/&lt;/g,"<").replace(/&gt;/g,">");console.log(b)}},a.HTMLLint=h}("undefined"==typeof exports?this:exports);
\ No newline at end of file
+!function(a){"use strict";function b(a){var b=e.source+"(?:\\s*("+c(a)+")\\s*(?:"+h.join("|")+"))?";if(a.customAttrSurround){for(var d=[],f=a.customAttrSurround.length-1;f>=0;f--)d[f]="(?:("+a.customAttrSurround[f][0].source+")\\s*"+b+"\\s*("+a.customAttrSurround[f][1].source+"))";d.push("(?:"+b+")"),b="(?:"+d.join("|")+")"}return new RegExp("^\\s*"+b)}function c(a){return g.concat(a.customAttrAssign||[]).map(function(a){return"(?:"+a.source+")"}).join("|")}function d(a){for(var b={},c=a.split(","),d=0;d<c.length;d++)b[c[d]]=!0,b[c[d].toUpperCase()]=!0;return b}var e=/([^\s"'<>\/=]+)/,f=/=/,g=[f],h=[/"([^"]*)"+/.source,/'([^']*)'+/.source,/([^\s"'=<>`]+)/.source],i=function(){var b;return b="function"==typeof require?require("ncname"):a.NCName,b=b?b.source.slice(1,-1):"[:A-Za-z_][:\\w\\-\\.]*","((?:"+b+"\\:)?"+b+")"}(),j=new RegExp("^<"+i),k=/^\s*(\/?)>/,l=new RegExp("^<\\/"+i+"[^>]*>"),m=/^<!DOCTYPE [^>]+>/i,n=!1;"x".replace(/x(.)?/g,function(a,b){n=""===b});var o=d("area,base,basefont,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),p=d("a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,noscript,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,svg,textarea,tt,u,var"),q=d("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),r=d("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"),s=d("script,style"),t=d("abbr,b,bdi,bdo,button,cite,code,data,dfn,em,h1,h2,h3,h4,h5,h6,i,kbd,label,legend,mark,meter,output,p,pre,progress,q,rp,rt,s,samp,small,span,strong,sub,sup,time,u,var"),u=d("a,abbr,area,audio,b,bdi,bdo,br,button,canvas,cite,code,data,datalist,del,dfn,em,embed,i,iframe,img,input,ins,kbd,keygen,label,link,main,map,mark,math,menu,meter,nav,noscript,object,ol,output,p,picture,pre,progress,q,ruby,s,samp,script,section,select,small,span,strong,sub,sup,svg,table,template,textarea,time,u,ul,var,video,wbr"),v={},w=a.HTMLParser=function(a,c){function d(a){var b=a.match(j);if(b){var c={tagName:b[1],attrs:[]};a=a.slice(b[0].length);for(var d,e;!(d=a.match(k))&&(e=a.match(y));)a=a.slice(e[0].length),c.attrs.push(e);if(d)return c.unarySlash=d[1],c.rest=a.slice(d[0].length),c}}function e(a){var b=a.tagName,d=a.unarySlash;if(c.html5&&g&&t[g]&&!u[b]&&f("",g),!c.html5)for(;g&&p[g];)f("",g);q[b]&&g===b&&f("",b);var e=o[b]||"html"===b&&"head"===g||!!d,h=a.attrs.map(function(a){var b,d,e,f,g,h,i,j=7;n&&-1===a[0].indexOf('""')&&(""===a[3]&&(a[3]=void 0),""===a[4]&&(a[4]=void 0),""===a[5]&&(a[5]=void 0));var k=1;if(c.customAttrSurround)for(var l=0,m=c.customAttrSurround.length;m>l;l++,k+=j)if(b=a[k+1],h=a[k+2],b){e=a[k+3],d=e||a[k+4]||a[k+5],i=e?'"':d?"'":"",f=a[k],g=a[k+6];break}return!b&&(b=a[k])&&(h=a[k+1],e=a[k+2],d=e||a[k+3]||a[k+4],i=e?'"':d?"'":""),void 0===d&&(d=r[b]?b:e),{name:b,value:d,customAssign:h||"=",customOpen:f||"",customClose:g||"",quote:i||""}});e||(x.push({tag:b,attrs:h}),g=b,d=""),c.start&&c.start(b,h,e,d)}function f(a,b){var d;if(b){var e=b.toLowerCase();for(d=x.length-1;d>=0&&x[d].tag.toLowerCase()!==e;d--);}else d=0;if(d>=0){for(var f=x.length-1;f>=d;f--)c.end&&c.end(x[f].tag,x[f].attrs,f>d||!a);x.length=d,g=d&&x[d-1].tag}}for(var g,h,i,w,x=[],y=b(c);a;){if(h=a,g&&s[g]){var z=g.toLowerCase(),A=v[z]||(v[z]=new RegExp("([\\s\\S]*?)</"+z+"[^>]*>","i"));a=a.replace(A,function(a,b){return"script"!==z&&"style"!==z&&"noscript"!==z&&(b=b.replace(/<!--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)\]\]>/g,"$1")),c.chars&&c.chars(b),""}),f("</"+z+">",z)}else{var B=a.indexOf("<");if(0===B){if(/^<!--/.test(a)){var C=a.indexOf("-->");if(C>=0){c.comment&&c.comment(a.substring(4,C)),a=a.substring(C+3),i="";continue}}if(/^<!\[/.test(a)){var D=a.indexOf("]>");if(D>=0){c.comment&&c.comment(a.substring(2,D+1),!0),a=a.substring(D+2),i="";continue}}var E=a.match(m);if(E){c.doctype&&c.doctype(E[0]),a=a.substring(E[0].length),i="";continue}var F=a.match(l);if(F){a=a.substring(F[0].length),F[0].replace(l,f),i="/"+F[1].toLowerCase();continue}var G=d(a);if(G){a=G.rest,e(G),i=G.tagName.toLowerCase();continue}}var H;B>=0?(H=a.substring(0,B),a=a.substring(B)):(H=a,a="");var I=d(a);I?w=I.tagName:(I=a.match(l),w=I?"/"+I[1]:""),c.chars&&c.chars(H,i,w),i=""}if(a===h)throw"Parse Error: "+a}c.partialMarkup||f()};a.HTMLtoXML=function(a){var b="";return new w(a,{start:function(a,c,d){b+="<"+a;for(var e=0;e<c.length;e++)b+=" "+c[e].name+'="'+(c[e].value||"").replace(/"/g,"&#34;")+'"';b+=(d?"/":"")+">"},end:function(a){b+="</"+a+">"},chars:function(a){b+=a},comment:function(a){b+="<!--"+a+"-->"},ignore:function(a){b+=a}}),b},a.HTMLtoDOM=function(a,b){var c=d("html,head,body,title"),e={link:"head",base:"head"};b?b=b.ownerDocument||b.getOwnerDocument&&b.getOwnerDocument()||b:"undefined"!=typeof DOMDocument?b=new DOMDocument:"undefined"!=typeof document&&document.implementation&&document.implementation.createDocument?b=document.implementation.createDocument("","",null):"undefined"!=typeof ActiveX&&(b=new ActiveXObject("Msxml.DOMDocument"));var f=[],g=b.documentElement||b.getDocumentElement&&b.getDocumentElement();if(!g&&b.createElement&&!function(){var a=b.createElement("html"),c=b.createElement("head");c.appendChild(b.createElement("title")),a.appendChild(c),a.appendChild(b.createElement("body")),b.appendChild(a)}(),b.getElementsByTagName)for(var h in c)c[h]=b.getElementsByTagName(h)[0];var i=c.body;return new w(a,{start:function(a,d,g){if(c[a])return void(i=c[a]);var h=b.createElement(a);for(var j in d)h.setAttribute(d[j].name,d[j].value);e[a]&&"boolean"!=typeof c[e[a]]?c[e[a]].appendChild(h):i&&i.appendChild&&i.appendChild(h),g||(f.push(h),i=h)},end:function(){f.length-=1,i=f[f.length-1]},chars:function(a){i.appendChild(b.createTextNode(a))},comment:function(){},ignore:function(){}}),b}}("undefined"==typeof exports?this:exports),function(a){"use strict";function b(a){return a?a.replace(/[\t\n\r ]+/g," "):a}function c(a){var b={};return a.forEach(function(a){b[a]=1}),function(a){return 1===b[a]}}function d(a){return c(a.split(/,/))}function e(a,c,d,e,f){var g="",h="";return c.preserveLineBreaks&&(a=a.replace(/^[\t ]*[\n\r][\t\n\r ]*/,function(){return g="\n",""}).replace(/[\t\n\r ]*[\n\r][\t ]*$/,function(){return h="\n",""})),d&&(a=a.replace(/^\s+/,!g&&c.conservativeCollapse?" ":"")),e&&(a=a.replace(/\s+$/,!h&&c.conservativeCollapse?" ":"")),f&&(a=b(a)),g+a+h}function f(a,b,c,d){var f=b&&!W(b);f&&!d.collapseInlineTagWhitespace&&(f="/"===b.charAt(0)?!U(b.slice(1)):!V(b));var g=c&&!W(c);return g&&!d.collapseInlineTagWhitespace&&(g="/"===c.charAt(0)?!V(c.slice(1)):!U(c)),e(a,d,f,g,b&&c)}function g(a){return/^\[if\s[^\]]+\]|\[endif\]$/.test(a)}function h(a,b){if(/^!/.test(a))return!0;if(b.ignoreCustomComments)for(var c=0,d=b.ignoreCustomComments.length;d>c;c++)if(b.ignoreCustomComments[c].test(a))return!0;return!1}function i(a,b){var c=b.customEventAttributes;if(c){for(var d=c.length;d--;)if(c[d].test(a))return!0;return!1}return/^on[a-z]{3,}$/.test(a)}function j(a){return/^[^\x20\t\n\f\r"'`=<>]+$/.test(a)}function k(a,b){for(var c=a.length;c--;)if(a[c].name.toLowerCase()===b)return!0;return!1}function l(a,b,c,d){return c=c?T(c.toLowerCase()):"","script"===a&&"language"===b&&"javascript"===c||"form"===a&&"method"===b&&"get"===c||"input"===a&&"type"===b&&"text"===c||"script"===a&&"charset"===b&&!k(d,"src")||"a"===a&&"name"===b&&k(d,"id")||"area"===a&&"shape"===b&&"rect"===c}function m(a,b,c){return"script"===a&&"type"===b&&X(T(c.toLowerCase()))}function n(a,b){if("script"!==a)return!1;for(var c=0,d=b.length;d>c;c++){var e=b[c].name.toLowerCase();if("type"===e){var f=T(b[c].value.split(/;/,2)[0]).toLowerCase();return""===f||X(f)}}return!0}function o(a,b,c){return("style"===a||"link"===a)&&"type"===b&&"text/css"===T(c.toLowerCase())}function p(a,b){return Y(a)||"draggable"===a&&!Z(b)}function q(a,b){return/^(?:a|area|link|base)$/.test(b)&&"href"===a||"img"===b&&/^(?:src|longdesc|usemap)$/.test(a)||"object"===b&&/^(?:classid|codebase|data|usemap)$/.test(a)||"q"===b&&"cite"===a||"blockquote"===b&&"cite"===a||("ins"===b||"del"===b)&&"cite"===a||"form"===b&&"action"===a||"input"===b&&("src"===a||"usemap"===a)||"head"===b&&"profile"===a||"script"===b&&("src"===a||"for"===a)}function r(a,b){return/^(?:a|area|object|button)$/.test(b)&&"tabindex"===a||"input"===b&&("maxlength"===a||"tabindex"===a)||"select"===b&&("size"===a||"tabindex"===a)||"textarea"===b&&/^(?:rows|cols|tabindex)$/.test(a)||"colgroup"===b&&"span"===a||"col"===b&&"span"===a||("th"===b||"td"===b)&&("rowspan"===a||"colspan"===a)}function s(a,b){if("link"!==a)return!1;for(var c=0,d=b.length;d>c;c++)if("rel"===b[c].name&&"canonical"===b[c].value)return!0}function t(a,c,d,e,f){if(d&&i(c,e)){if(d=T(d).replace(/^javascript:\s*/i,"").replace(/\s*;$/,""),e.minifyJS){var g=M($+d+_,e.minifyJS);return g.slice($.length,-_.length)}return d}return"class"===c?b(T(d)):q(c,a)?(d=T(d),e.minifyURLs&&!s(a,f)?L(d,e.minifyURLs):d):r(c,a)?T(d):"style"===c?(d=T(d),d&&(d=d.replace(/\s*;\s*$/,"")),e.minifyCSS?N(d,e.minifyCSS,!0):d):(u(a,f)&&"content"===c?d=d.replace(/\s+/g,"").replace(/[0-9]+\.[0-9]+/g,function(a){return(+a).toString()}):d&&e.customAttrCollapse&&e.customAttrCollapse.test(c)?d=d.replace(/\n+|\r+|\s{2,}/g,""):"script"===a&&"type"===c&&(d=T(d.replace(/\s*;\s*/g,";"))),d)}function u(a,b){if("meta"!==a)return!1;for(var c=0,d=b.length;d>c;c++)if("name"===b[c].name&&"viewport"===b[c].value)return!0}function v(a){return"*{"+a+"}"}function w(a){var b=a.match(/^\*\{([\s\S]*)\}$/m);return b&&b[1]?b[1]:a}function x(a,b){return a.replace(/^(\[if\s[^\]]+\]>)([\s\S]*?)(<!\[endif\])$/,function(a,c,d,e){return c+P(d,b,!0)+e})}function y(a){return a.replace(/^(?:\s*\/\*\s*<!\[CDATA\[\s*\*\/|\s*\/\/\s*<!\[CDATA\[.*)/,"").replace(/(?:\/\*\s*\]\]>\s*\*\/|\/\/\s*\]\]>)\s*$/,"")}function z(a,b,c){for(var d=0,e=c.length;e>d;d++)if("type"===c[d].name.toLowerCase()&&b.processScripts.indexOf(c[d].value)>-1)return P(a,b);return a}function A(a,b){return a.replace(aa[b],"").replace(ba[b],"")}function B(a,b){switch(a){case"html":case"head":return!0;case"body":return!ea(b);case"colgroup":return"col"===b;case"tbody":return"tr"===b}return!1}function C(a,b){switch(b){case"colgroup":return"colgroup"===a;case"tbody":return ma(a)}return!1}function D(a,b){switch(a){case"html":case"head":case"body":case"colgroup":case"caption":return!0;case"li":case"optgroup":case"tr":return b===a;case"dt":case"dd":return fa(b);case"p":return ga(b);case"rb":case"rt":case"rp":return ia(b);case"rtc":return ja(b);case"option":return ka(b);case"thead":case"tbody":return la(b);case"tfoot":return"tbody"===b;case"td":case"th":return na(b)}return!1}function E(a,b,c){var d=!c||/^\s*$/.test(c);return d?"input"===a&&"value"===b||ta.test(b):!1}function F(a,b){for(var c=b.length-1;c>=0;c--)if(b[c].name===a)return!0;return!1}function G(a,b){switch(a){case"textarea":return!1;case"audio":case"script":case"video":if(F("src",b))return!1;break;case"iframe":if(F("src",b)||F("srcdoc",b))return!1;break;case"object":if(F("data",b))return!1;break;case"applet":if(F("code",b))return!1}return!0}function H(a){return!/^(?:script|style|pre|textarea)$/.test(a)}function I(a){return!/^(?:pre|textarea)$/.test(a)}function J(a,b,c,d,e,f,g){var h,i,k=f.caseSensitive?a.name:a.name.toLowerCase(),n=a.value,q=a.quote;if(f.removeRedundantAttributes&&l(c,k,n,b)||f.removeScriptTypeAttributes&&m(c,k,n)||f.removeStyleLinkTypeAttributes&&o(c,k,n))return"";if(n=t(c,k,n,f,b),f.removeEmptyAttributes&&E(c,k,n))return"";if(void 0!==n&&!f.removeAttributeQuotes||!j(n)){if(!f.preventAttributesEscaping){if(void 0!==f.quoteCharacter)q="'"===f.quoteCharacter?"'":'"';else{var r=(n.match(/'/g)||[]).length,s=(n.match(/"/g)||[]).length;q=s>r?"'":'"'}n='"'===q?n.replace(/"/g,"&#34;"):n.replace(/'/g,"&#39;")}i=q+n+q,g||f.removeTagWhitespace||(i+=" ")}else i=!g||d||/\/$/.test(n)?n+" ":n;return void 0===n||f.collapseBooleanAttributes&&p(k.toLowerCase(),n.toLowerCase())?(h=k,g||(h+=" ")):h=k+a.customAssign+i,a.customOpen+h+a.customClose}function K(a){"includeAutoGeneratedTags"in a||(a.includeAutoGeneratedTags=!0);for(var b=["canCollapseWhitespace","canTrimWhitespace"],c=0,d=b.length;d>c;c++)a[b[c]]||(a[b[c]]=function(){return!1})}function L(b,c){"object"!=typeof c&&(c={});try{var d=a.RelateUrl;return"undefined"==typeof d&&"function"==typeof require&&(d=require("relateurl")),d&&d.relate?d.relate(b,c):b}catch(e){R(e)}return b}function M(b,c){"object"!=typeof c&&(c={}),c.fromString=!0;var d=c.output||{};d.inline_script=!0,c.output=d;try{var e=a.UglifyJS;if("undefined"==typeof e&&"function"==typeof require&&(e=require("uglify-js")),!e)return b;if(e.minify)return e.minify(b,c).code;if(e.parse){var f=e.parse(b);f.figure_out_scope();var g=e.Compressor(),h=f.transform(g);h.figure_out_scope(),h.compute_char_frequency(),c.mangle!==!1&&h.mangle_names();var i=e.OutputStream(c.output);return h.print(i),i.toString()}return b}catch(j){R(j)}return b}function N(b,c,d){"object"!=typeof c&&(c={}),"undefined"==typeof c.advanced&&(c.advanced=!1);try{var e=a.CleanCSS;"undefined"==typeof e&&"function"==typeof require&&(e=require("clean-css"));var f=new e(c);return d?w(f.minify(v(b)).styles):f.minify(b).styles}catch(g){R(g)}return b}function O(a){var b;do b=Math.random().toString(36).slice(2);while(~a.indexOf(b));return b}function P(a,c,d){function i(a,b){return H(a)||c.canCollapseWhitespace(a,b)}function j(a,b){return I(a)||c.canTrimWhitespace(a,b)}function k(){for(var a=t.length-1;a>0&&!/^<[^\/!]/.test(t[a]);)a--;t.length=Math.max(0,a)}function l(){for(var a=t.length-1;a>0&&!/^<\//.test(t[a]);)a--;t.length=Math.max(0,a)}function m(a){var b;t.length>1&&/^(?:<!|$)/.test(t[t.length-1])&&/\s$/.test(t[t.length-2])?b=t.length-2:t.length>0&&/\s$/.test(t[t.length-1])&&(b=t.length-1),b>0&&(t[b]=t[b].replace(/\s+$/,function(b){return f(b,"comment",a,c)}))}c=c||{};var o=[];K(c),a=c.collapseWhitespace?T(a):a;var p,q,r,s,t=[],u="",v="",w=[],E=[],F=[],L="",P="",U=c.lint,W=Date.now(),X=[],Y=[];a=a.replace(/<!-- htmlmin:ignore -->([\s\S]*?)<!-- htmlmin:ignore -->/g,function(b,c){r||(r="<!--!"+O(a)+"-->");var d=r+X.length;return X.push(c),d});var Z=(c.ignoreCustomFragments||[/<%[\s\S]*?%>/,/<\?[\s\S]*?\?>/]).map(function(a){return a.source});if(Z.length){var $=new RegExp("\\s*(?:"+Z.join("|")+")+\\s*","g");a=a.replace($,function(b){s||(s=O(a));var c=s+Y.length;return Y.push(b),"   "+c+"   "})}new S(a,{partialMarkup:d,html5:"undefined"!=typeof c.html5?c.html5:!0,start:function(a,b,d,e){var f=a.toLowerCase();if("svg"===f){o.push(c);var g={};for(var h in c)g[h]=c[h];g.keepClosingSlash=!0,g.caseSensitive=!0,c=g}a=c.caseSensitive?a:f,v=a,p=a,V(a)||(u=""),q=!1,w=b;var n=c.removeOptionalTags;if(n){var r=sa(a);r&&B(L,a)&&k(),L="",r&&D(P,a)&&(l(),n=!C(P,a)),P=""}c.collapseWhitespace&&(E.length||m(a),j(a,b)||E.push(a),i(a,b)||F.push(a));var s="<"+a,x=e&&c.keepClosingSlash;t.push(s),U&&U.testElement(a);for(var y,z=[],A=!0,G=b.length;--G>=0;)U&&U.testAttribute(a,b[G].name.toLowerCase(),b[G].value),y=J(b[G],b,a,x,G,c,A),y&&(A=!1,z.unshift(y));z.length>0?(t.push(" "),t.push.apply(t,z)):n&&ca(a)&&(L=a),t.push(t.pop()+(x?"/":"")+">")},end:function(a,b,d){var e=a.toLowerCase();"svg"===e&&(c=o.pop()),a=c.caseSensitive?a:e,c.collapseWhitespace&&(E.length?a===E[E.length-1]&&E.pop():m("/"+a),F.length&&a===F[F.length-1]&&F.pop());var f=!1;a===v&&(v="",f=!q),c.removeOptionalTags&&(f&&oa(L)&&k(),L="",!sa(a)||!P||ra(P)||"p"===P&&ha(a)||l(),P=da(a)?a:""),c.removeEmptyElements&&f&&G(a,b)?(k(),L="",P=""):(!c.includeAutoGeneratedTags&&d||t.push("</"+a+">"),p="/"+a,V(a)||(u=""))},chars:function(a,d,g){if(d=""===d?"comment":d,g=""===g?"comment":g,c.collapseWhitespace){if(!E.length){if("comment"===d){var h=""===t[t.length-1];if(h&&(d=p),t.length>1&&(h||/ $/.test(u))){var i=t.length-2;t[i]=t[i].replace(/\s+$/,function(b){return a=b+a,""})}}if(d&&V("/"===d.charAt(0)?d.slice(1):d)&&(a=e(a,c,/(?:^|\s)$/.test(u))),a=d||g?f(a,d,g,c):T(a),!a&&/\s$/.test(u)&&d&&"/"===d.charAt(0))for(var m=t.length-2,o=d.slice(1);m>=0&&j(o);m--){var r=t[m],s=r.match(/^<\/([\w:-]+)>$/);if(s)o=s[1];else if(/>$/.test(r)||(t[m]=f(r,null,g,c)))break}}F.length||(a=d&&g||"html"===g?a:b(a))}"script"!==v&&"style"!==v||(c.removeCommentsFromCDATA&&(a=A(a,v)),c.removeCDATASectionsFromCDATA&&(a=y(a)),c.processScripts&&(a=z(a,c,w))),c.minifyJS&&n(v,w)&&(a=M(a,c.minifyJS),";"===a.charAt(a.length-1)&&(a=a.slice(0,-1))),"style"===v&&c.minifyCSS&&(a=N(a,c.minifyCSS)),c.removeOptionalTags&&a&&(("html"===L||"body"===L&&!/^\s/.test(a))&&k(),L="",(pa(P)||qa(P)&&!/^\s/.test(a))&&l(),P=""),p=/^\s*$/.test(a)?d:"comment",u+=a,a&&(q=!0),U&&U.testChars(a),t.push(a)},comment:function(a,b){var d=b?"<!":"<!--",e=b?">":"-->";a=g(a)?d+x(a,c)+e:c.removeComments?h(a,c)?"<!--"+a+"-->":"":d+a+e,c.removeOptionalTags&&a&&(L="",P=""),t.push(a)},doctype:function(a){t.push(c.useShortDoctype?"<!DOCTYPE html>":b(a))},customAttrAssign:c.customAttrAssign,customAttrSurround:c.customAttrSurround}),c.removeOptionalTags&&(oa(L)&&k(),P&&!ra(P)&&l());var _=Q(t,c);return s&&(_=_.replace(new RegExp("(\\s*)"+s+"([0-9]+)(\\s*)","g"),function(a,b,d,f){var g=Y[+d];return c.collapseWhitespace?("       "!==b&&(g=b+g),"        "!==f&&(g+=f),e(g,{preserveLineBreaks:c.preserveLineBreaks,conservativeCollapse:!0},/^\s/.test(g),/\s$/.test(g))):g})),r&&(_=_.replace(new RegExp(r+"([0-9]+)","g"),function(a,b){return X[+b]})),R("minified in: "+(Date.now()-W)+"ms"),_}function Q(a,b){var c,d=b.maxLineLength;if(d){for(var e,f=[],g="",h=0,i=a.length;i>h;h++)e=a[h],g.length+e.length<d?g+=e:(f.push(g.replace(/^\n/,"")),g=e);f.push(g),c=f.join("\n")}else c=a.join("");return b.collapseWhitespace?T(c):c}var R,S;R=a.console&&a.console.log?function(b){a.console.log(b)}:function(){},a.HTMLParser?S=a.HTMLParser:"function"==typeof require&&(S=require("./htmlparser").HTMLParser);var T=function(a){return"string"!=typeof a?a:a.replace(/^\s+/,"").replace(/\s+$/,"")};String.prototype.trim&&(T=function(a){return"string"!=typeof a?a:a.trim()});var U=d("a,abbr,acronym,b,bdi,bdo,big,button,cite,code,del,dfn,em,font,i,ins,kbd,mark,math,q,rt,rp,s,samp,small,span,strike,strong,sub,sup,svg,time,tt,u,var"),V=d("a,abbr,acronym,b,big,del,em,font,i,ins,kbd,mark,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var"),W=d("comment,img,input"),X=c(["text/javascript","text/ecmascript","text/jscript","application/javascript","application/x-javascript","application/ecmascript"]),Y=d("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),Z=d("true,false"),$="!function(){",_="}();",aa={script:/^\s*(?:\/\/)?\s*<!--.*\n?/,style:/^\s*<!--\s*/},ba={script:/\s*(?:\/\/)?\s*-->\s*$/,style:/\s*-->\s*$/},ca=d("html,head,body,colgroup,tbody"),da=d("html,head,body,li,dt,dd,p,rb,rt,rtc,rp,optgroup,option,colgroup,caption,thead,tbody,tfoot,tr,td,th"),ea=d("meta,link,script,style,template,noscript"),fa=d("dt,dd"),ga=d("address,article,aside,blockquote,details,div,dl,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,main,menu,nav,ol,p,pre,section,table,ul"),ha=d("a,audio,del,ins,map,noscript,video"),ia=d("rb,rt,rtc,rp"),ja=d("rb,rtc,rp"),ka=d("option,optgroup"),la=d("tbody,tfoot"),ma=d("thead,tbody,tfoot"),na=d("td,th"),oa=d("html,head,body"),pa=d("html,body"),qa=d("head,colgroup,caption"),ra=d("dt,thead"),sa=d("a,abbr,acronym,address,applet,area,article,aside,audio,b,base,basefont,bdi,bdo,bgsound,big,blink,blockquote,body,br,button,canvas,caption,center,cite,code,col,colgroup,command,content,data,datalist,dd,del,details,dfn,dialog,dir,div,dl,dt,element,em,embed,fieldset,figcaption,figure,font,footer,form,frame,frameset,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,i,iframe,image,img,input,ins,isindex,kbd,keygen,label,legend,li,link,listing,main,map,mark,marquee,menu,menuitem,meta,meter,multicol,nav,nobr,noembed,noframes,noscript,object,ol,optgroup,option,output,p,param,picture,plaintext,pre,progress,q,rp,rt,rtc,ruby,s,samp,script,section,select,shadow,small,source,spacer,span,strike,strong,style,sub,summary,sup,table,tbody,td,template,textarea,tfoot,th,thead,time,title,tr,track,tt,u,ul,var,video,wbr,xmp"),ta=new RegExp("^(?:class|id|style|title|lang|dir|on(?:focus|blur|change|click|dblclick|mouse(?:down|up|over|move|out)|key(?:press|down|up)))$");a.minify=function(a,b){return P(a,b)}}("undefined"==typeof exports?this:exports),function(a){"use strict";function b(a){return/^(?:big|small|hr|blink|marquee)$/.test(a)}function c(a){return/^(?:applet|basefont|center|dir|font|isindex|strike)$/.test(a)}function d(a){return/^on[a-z]+/.test(a)}function e(a){return"style"===a.toLowerCase()}function f(a,b){return"align"===b&&/^(?:caption|applet|iframe|img|imput|object|legend|table|hr|div|h[1-6]|p)$/.test(a)||"alink"===b&&"body"===a||"alt"===b&&"applet"===a||"archive"===b&&"applet"===a||"background"===b&&"body"===a||"bgcolor"===b&&/^(?:table|t[rdh]|body)$/.test(a)||"border"===b&&/^(?:img|object)$/.test(a)||"clear"===b&&"br"===a||"code"===b&&"applet"===a||"codebase"===b&&"applet"===a||"color"===b&&/^(?:base(?:font)?)$/.test(a)||"compact"===b&&/^(?:dir|[dou]l|menu)$/.test(a)||"face"===b&&/^base(?:font)?$/.test(a)||"height"===b&&/^(?:t[dh]|applet)$/.test(a)||"hspace"===b&&/^(?:applet|img|object)$/.test(a)||"language"===b&&"script"===a||"link"===b&&"body"===a||"name"===b&&"applet"===a||"noshade"===b&&"hr"===a||"nowrap"===b&&/^t[dh]$/.test(a)||"object"===b&&"applet"===a||"prompt"===b&&"isindex"===a||"size"===b&&/^(?:hr|font|basefont)$/.test(a)||"start"===b&&"ol"===a||"text"===b&&"body"===a||"type"===b&&/^(?:li|ol|ul)$/.test(a)||"value"===b&&"li"===a||"version"===b&&"html"===a||"vlink"===b&&"body"===a||"vspace"===b&&/^(?:applet|img|object)$/.test(a)||"width"===b&&/^(?:hr|td|th|applet|pre)$/.test(a)}function g(a,b){return"href"===a&&/^\s*javascript\s*:\s*void\s*(\s+0|\(\s*0\s*\))\s*$/i.test(b)}function h(){this.log=[],this._lastElement=null,this._isElementRepeated=!1}h.prototype.testElement=function(a){c(a)?this.log.push('Found <span class="deprecated-element">deprecated</span> <strong><code>&lt;'+a+"&gt;</code></strong> element"):b(a)?this.log.push('Found <span class="presentational-element">presentational</span> <strong><code>&lt;'+a+"&gt;</code></strong> element"):this.checkRepeatingElement(a)},h.prototype.checkRepeatingElement=function(a){"br"===a&&"br"===this._lastElement?this._isElementRepeated=!0:this._isElementRepeated&&(this._reportRepeatingElement(),this._isElementRepeated=!1),this._lastElement=a},h.prototype._reportRepeatingElement=function(){this.log.push("Found <code>&lt;br></code> sequence. Try replacing it with styling.")},h.prototype.testAttribute=function(a,b,c){d(b)?this.log.push('Found <span class="event-attribute">event attribute</span> (<strong>'+b+"</strong>) on <strong><code>&lt;"+a+"&gt;</code></strong> element."):f(a,b)?this.log.push('Found <span class="deprecated-attribute">deprecated</span> <strong>'+b+"</strong> attribute on <strong><code>&lt;"+a+"&gt;</code></strong> element."):e(b)?this.log.push('Found <span class="style-attribute">style attribute</span> on <strong><code>&lt;'+a+"&gt;</code></strong> element."):g(b,c)&&this.log.push('Found <span class="inaccessible-attribute">inaccessible attribute</span> (on <strong><code>&lt;'+a+"&gt;</code></strong> element).")},h.prototype.testChars=function(a){this._lastElement="",/(&nbsp;\s*){2,}/.test(a)&&this.log.push("Found repeating <strong><code>&amp;nbsp;</code></strong> sequence. Try replacing it with styling.")},h.prototype.test=function(a,b,c){this.testElement(a),this.testAttribute(a,b,c)},h.prototype.populate=function(a){if(this._isElementRepeated&&this._reportRepeatingElement(),this.log.length)if(a)a.innerHTML="<ol><li>"+this.log.join("<li>")+"</ol>";else{var b=" - "+this.log.join("\n - ").replace(/(<([^>]+)>)/gi,"").replace(/&lt;/g,"<").replace(/&gt;/g,">");console.log(b)}},a.HTMLLint=h}("undefined"==typeof exports?this:exports);
\ No newline at end of file
index 16d7db2..ad950e0 100644 (file)
       </div>
 
     </div>
+    <script src="assets/ncname-browser.js"></script>
     <script src="dist/htmlminifier.min.js"></script>
     <script src="assets/uglify.js"></script>
     <script src="assets/cleancss-browser.js"></script>
index 77fe3b7..ae0865d 100644 (file)
@@ -35,6 +35,7 @@
   "scripts": {
     "assets": "grunt assets",
     "assets/clean-css": "browserify --standalone CleanCSS node_modules/clean-css/index.js | uglifyjs --compress --mangle -o assets/cleancss-browser.js",
+    "assets/ncname": "browserify node_modules/ncname/ --standalone NCName | uglifyjs --compress --mangle -o assets/ncname-browser.js",
     "assets/relateurl": "browserify node_modules/relateurl/ --standalone RelateUrl | uglifyjs --compress --mangle -o assets/relateurl-browser.js",
     "assets/uglify-js": "uglifyjs --self --compress --mangle -o assets/uglify.js",
     "test": "grunt test"
@@ -44,6 +45,7 @@
     "clean-css": "3.4.x",
     "cli": "0.11.x",
     "concat-stream": "1.5.x",
+    "ncname": "1.0.x",
     "relateurl": "0.2.x",
     "uglify-js": "2.6.x"
   },
index 52a918b..ed4077f 100644 (file)
         // attr value, no quotes
         /([^\s"'=<>`]+)/.source
       ],
-      startTagOpen = /^<([:A-Za-z_][:\w\-\.]*)/,
+      // https://www.w3.org/TR/1999/REC-xml-names-19990114/#NT-QName
+      qnameCapture = (function() {
+        var ncname;
+        if (typeof require === 'function') {
+          ncname = require('ncname');
+        }
+        else {
+          ncname = global.NCName;
+        }
+        if (ncname) {
+          ncname = ncname.source.slice(1, -1);
+        }
+        else {
+          ncname = '[:A-Za-z_][:\\w\\-\\.]*';
+        }
+        return '((?:' + ncname + '\\:)?' + ncname + ')';
+      })(),
+      startTagOpen = new RegExp('^<' + qnameCapture),
       startTagClose = /^\s*(\/?)>/,
-      endTag = /^<\/([:A-Za-z_][:\w\-\.]*)[^>]*>/,
+      endTag = new RegExp('^<\\/' + qnameCapture + '[^>]*>'),
       doctype = /^<!DOCTYPE [^>]+>/i;
 
   var IS_REGEX_CAPTURING_BROKEN = false;
index f351f6b..15a7e17 100644 (file)
@@ -6,6 +6,7 @@
     <link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-1.22.0.css">
     <script src="https://code.jquery.com/qunit/qunit-1.22.0.js"></script>
     <script src="../assets/cleancss-browser.js"></script>
+    <script src="../assets/ncname-browser.js"></script>
     <script src="../assets/relateurl-browser.js"></script>
     <script src="../assets/uglify.js"></script>
     <script src="../dist/htmlminifier.js"></script>
index 8beb25c..e4ffc3f 100644 (file)
     input = '<html âš¡></html>';
     equal(minify(input), input);
 
+    input = '<h:ællæ></h:ællæ>';
+    equal(minify(input), input);
+
+    input = '<$unicorn>';
+    throws(function() {
+      minify(input);
+    }, 'Invalid tag name');
+
     input = '<begriffs.pagination ng-init="perPage=20" collection="logs" url="\'/api/logs?user=-1\'" per-page="perPage" per-page-presets="[10,20,50,100]" template-url="/assets/paginate-anything.html"></begriffs.pagination>';
     equal(minify(input), input);