diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/html-minifier/src/tokenchain.js | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/html-minifier/src/tokenchain.js')
| -rw-r--r-- | node_modules/html-minifier/src/tokenchain.js | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/node_modules/html-minifier/src/tokenchain.js b/node_modules/html-minifier/src/tokenchain.js new file mode 100644 index 00000000..f8892d01 --- /dev/null +++ b/node_modules/html-minifier/src/tokenchain.js @@ -0,0 +1,71 @@ +'use strict'; + +function Sorter() { +} + +Sorter.prototype.sort = function(tokens, fromIndex) { + fromIndex = fromIndex || 0; + for (var i = 0, len = this.keys.length; i < len; i++) { + var key = this.keys[i]; + var token = key.slice(1); + var index = tokens.indexOf(token, fromIndex); + if (index !== -1) { + do { + if (index !== fromIndex) { + tokens.splice(index, 1); + tokens.splice(fromIndex, 0, token); + } + fromIndex++; + } while ((index = tokens.indexOf(token, fromIndex)) !== -1); + return this[key].sort(tokens, fromIndex); + } + } + return tokens; +}; + +function TokenChain() { +} + +TokenChain.prototype = { + add: function(tokens) { + var self = this; + tokens.forEach(function(token) { + var key = '$' + token; + if (!self[key]) { + self[key] = []; + self[key].processed = 0; + } + self[key].push(tokens); + }); + }, + createSorter: function() { + var self = this; + var sorter = new Sorter(); + sorter.keys = Object.keys(self).sort(function(j, k) { + var m = self[j].length; + var n = self[k].length; + return m < n ? 1 : m > n ? -1 : j < k ? -1 : j > k ? 1 : 0; + }).filter(function(key) { + if (self[key].processed < self[key].length) { + var token = key.slice(1); + var chain = new TokenChain(); + self[key].forEach(function(tokens) { + var index; + while ((index = tokens.indexOf(token)) !== -1) { + tokens.splice(index, 1); + } + tokens.forEach(function(token) { + self['$' + token].processed++; + }); + chain.add(tokens.slice(0)); + }); + sorter[key] = chain.createSorter(); + return true; + } + return false; + }); + return sorter; + } +}; + +module.exports = TokenChain; |
