minify/optlex.lua

Fri, 05 May 2017 09:44:05 +0100

author
Matthew Wild <mwild1@gmail.com>
date
Fri, 05 May 2017 09:44:05 +0100
branch
lua5.2
changeset 93
07c10f9ba77c
parent 1
2d9fe676e684
child 99
2b6416334a25
permissions
-rw-r--r--

minify: Return _M from modules that weren't

1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 --[[--------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 optlex.lua: does lexer-based optimizations
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 This file is part of LuaSrcDiet.
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 Copyright (c) 2008 Kein-Hong Man <khman@users.sf.net>
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 The COPYRIGHT file describes the conditions
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8 under which this software may be distributed.
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 See the ChangeLog for more information.
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 ----------------------------------------------------------------------]]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 --[[--------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 -- NOTES:
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 -- * For more lexer-based optimization ideas, see the TODO items or
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 -- look at technotes.txt.
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 -- * TODO: general string delimiter conversion optimizer
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 -- * TODO: (numbers) warn if overly significant digit
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 ----------------------------------------------------------------------]]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 local base = _G
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 local string = require "string"
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 module "optlex"
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 local match = string.match
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 local sub = string.sub
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 local find = string.find
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28 local rep = string.rep
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 local print
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32 -- variables and data structures
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 -- error function, can override by setting own function into module
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 error = base.error
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38 warn = {} -- table for warning flags
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 local stoks, sinfos, stoklns -- source lists
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42 local is_realtoken = { -- significant (grammar) tokens
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43 TK_KEYWORD = true,
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44 TK_NAME = true,
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 TK_NUMBER = true,
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
46 TK_STRING = true,
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47 TK_LSTRING = true,
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
48 TK_OP = true,
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
49 TK_EOS = true,
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
50 }
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
51 local is_faketoken = { -- whitespace (non-grammar) tokens
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
52 TK_COMMENT = true,
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
53 TK_LCOMMENT = true,
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
54 TK_EOL = true,
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
55 TK_SPACE = true,
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
56 }
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
57
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
58 local opt_details -- for extra information
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
59
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
60 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
61 -- true if current token is at the start of a line
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
62 -- * skips over deleted tokens via recursion
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
63 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
64
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
65 local function atlinestart(i)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
66 local tok = stoks[i - 1]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67 if i <= 1 or tok == "TK_EOL" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68 return true
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
69 elseif tok == "" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
70 return atlinestart(i - 1)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
71 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
72 return false
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
73 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
74
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
75 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
76 -- true if current token is at the end of a line
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
77 -- * skips over deleted tokens via recursion
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
78 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
79
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
80 local function atlineend(i)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
81 local tok = stoks[i + 1]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
82 if i >= #stoks or tok == "TK_EOL" or tok == "TK_EOS" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
83 return true
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
84 elseif tok == "" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
85 return atlineend(i + 1)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
86 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
87 return false
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
88 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
89
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
90 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
91 -- counts comment EOLs inside a long comment
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
92 -- * in order to keep line numbering, EOLs need to be reinserted
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
93 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
94
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
95 local function commenteols(lcomment)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
96 local sep = #match(lcomment, "^%-%-%[=*%[")
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
97 local z = sub(lcomment, sep + 1, -(sep - 1)) -- remove delims
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
98 local i, c = 1, 0
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
99 while true do
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
100 local p, q, r, s = find(z, "([\r\n])([\r\n]?)", i)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
101 if not p then break end -- if no matches, done
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
102 i = p + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
103 c = c + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
104 if #s > 0 and r ~= s then -- skip CRLF or LFCR
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
105 i = i + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
106 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
107 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
108 return c
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
109 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
110
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
111 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
112 -- compares two tokens (i, j) and returns the whitespace required
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
113 -- * important! see technotes.txt for more information
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
114 -- * only two grammar/real tokens are being considered
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
115 -- * if "", no separation is needed
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
116 -- * if " ", then at least one whitespace (or EOL) is required
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
117 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
118
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
119 local function checkpair(i, j)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
120 local match = match
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
121 local t1, t2 = stoks[i], stoks[j]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
122 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
123 if t1 == "TK_STRING" or t1 == "TK_LSTRING" or
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
124 t2 == "TK_STRING" or t2 == "TK_LSTRING" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
125 return ""
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
126 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
127 elseif t1 == "TK_OP" or t2 == "TK_OP" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
128 if (t1 == "TK_OP" and (t2 == "TK_KEYWORD" or t2 == "TK_NAME")) or
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
129 (t2 == "TK_OP" and (t1 == "TK_KEYWORD" or t1 == "TK_NAME")) then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
130 return ""
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
131 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
132 if t1 == "TK_OP" and t2 == "TK_OP" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
133 -- for TK_OP/TK_OP pairs, see notes in technotes.txt
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
134 local op, op2 = sinfos[i], sinfos[j]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
135 if (match(op, "^%.%.?$") and match(op2, "^%.")) or
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
136 (match(op, "^[~=<>]$") and op2 == "=") or
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
137 (op == "[" and (op2 == "[" or op2 == "=")) then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
138 return " "
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
139 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
140 return ""
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
141 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
142 -- "TK_OP" + "TK_NUMBER" case
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
143 local op = sinfos[i]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
144 if t2 == "TK_OP" then op = sinfos[j] end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
145 if match(op, "^%.%.?%.?$") then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
146 return " "
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
147 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
148 return ""
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
149 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
150 else-- "TK_KEYWORD" | "TK_NAME" | "TK_NUMBER" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
151 return " "
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
152 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
153 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
154 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
155
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
156 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
157 -- repack tokens, removing deletions caused by optimization process
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
158 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
159
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
160 local function repack_tokens()
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
161 local dtoks, dinfos, dtoklns = {}, {}, {}
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
162 local j = 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
163 for i = 1, #stoks do
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
164 local tok = stoks[i]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
165 if tok ~= "" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
166 dtoks[j], dinfos[j], dtoklns[j] = tok, sinfos[i], stoklns[i]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
167 j = j + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
168 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
169 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
170 stoks, sinfos, stoklns = dtoks, dinfos, dtoklns
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
171 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
172
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
173 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
174 -- number optimization
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
175 -- * optimization using string formatting functions is one way of doing
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
176 -- this, but here, we consider all cases and handle them separately
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
177 -- (possibly an idiotic approach...)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
178 -- * scientific notation being generated is not in canonical form, this
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
179 -- may or may not be a bad thing, feedback welcome
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
180 -- * note: intermediate portions need to fit into a normal number range
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
181 -- * optimizations can be divided based on number patterns:
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
182 -- * hexadecimal:
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
183 -- (1) no need to remove leading zeros, just skip to (2)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
184 -- (2) convert to integer if size equal or smaller
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
185 -- * change if equal size -> lose the 'x' to reduce entropy
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
186 -- (3) number is then processed as an integer
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
187 -- (4) note: does not make 0[xX] consistent
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
188 -- * integer:
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
189 -- (1) note: includes anything with trailing ".", ".0", ...
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
190 -- (2) remove useless fractional part, if present, e.g. 123.000
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
191 -- (3) remove leading zeros, e.g. 000123
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
192 -- (4) switch to scientific if shorter, e.g. 123000 -> 123e3
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
193 -- * with fraction:
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
194 -- (1) split into digits dot digits
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
195 -- (2) if no integer portion, take as zero (can omit later)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
196 -- (3) handle degenerate .000 case, after which the fractional part
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
197 -- must be non-zero (if zero, it's matched as an integer)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
198 -- (4) remove trailing zeros for fractional portion
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
199 -- (5) p.q where p > 0 and q > 0 cannot be shortened any more
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
200 -- (6) otherwise p == 0 and the form is .q, e.g. .000123
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
201 -- (7) if scientific shorter, convert, e.g. .000123 -> 123e-6
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
202 -- * scientific:
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
203 -- (1) split into (digits dot digits) [eE] ([+-] digits)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
204 -- (2) if significand has ".", shift it out so it becomes an integer
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
205 -- (3) if significand is zero, just use zero
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
206 -- (4) remove leading zeros for significand
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
207 -- (5) shift out trailing zeros for significand
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
208 -- (6) examine exponent and determine which format is best:
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
209 -- integer, with fraction, scientific
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
210 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
211
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
212 local function do_number(i)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
213 local before = sinfos[i] -- 'before'
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
214 local z = before -- working representation
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
215 local y -- 'after', if better
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
216 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
217 if match(z, "^0[xX]") then -- hexadecimal number
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
218 local v = base.tostring(base.tonumber(z))
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
219 if #v <= #z then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
220 z = v -- change to integer, AND continue
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
221 else
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
222 return -- no change; stick to hex
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
223 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
224 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
225 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
226 if match(z, "^%d+%.?0*$") then -- integer or has useless frac
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
227 z = match(z, "^(%d+)%.?0*$") -- int portion only
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
228 if z + 0 > 0 then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
229 z = match(z, "^0*([1-9]%d*)$") -- remove leading zeros
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
230 local v = #match(z, "0*$")
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
231 local nv = base.tostring(v)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
232 if v > #nv + 1 then -- scientific is shorter
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
233 z = sub(z, 1, #z - v).."e"..nv
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
234 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
235 y = z
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
236 else
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
237 y = "0" -- basic zero
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
238 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
239 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
240 elseif not match(z, "[eE]") then -- number with fraction part
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
241 local p, q = match(z, "^(%d*)%.(%d+)$") -- split
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
242 if p == "" then p = 0 end -- int part zero
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
243 if q + 0 == 0 and p == 0 then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
244 y = "0" -- degenerate .000 case
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
245 else
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
246 -- now, q > 0 holds and p is a number
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
247 local v = #match(q, "0*$") -- remove trailing zeros
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
248 if v > 0 then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
249 q = sub(q, 1, #q - v)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
250 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
251 -- if p > 0, nothing else we can do to simplify p.q case
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
252 if p + 0 > 0 then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
253 y = p.."."..q
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
254 else
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
255 y = "."..q -- tentative, e.g. .000123
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
256 local v = #match(q, "^0*") -- # leading spaces
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
257 local w = #q - v -- # significant digits
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
258 local nv = base.tostring(#q)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
259 -- e.g. compare 123e-6 versus .000123
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
260 if w + 2 + #nv < 1 + #q then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
261 y = sub(q, -w).."e-"..nv
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
262 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
263 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
264 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
265 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
266 else -- scientific number
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
267 local sig, ex = match(z, "^([^eE]+)[eE]([%+%-]?%d+)$")
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
268 ex = base.tonumber(ex)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
269 -- if got ".", shift out fractional portion of significand
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
270 local p, q = match(sig, "^(%d*)%.(%d*)$")
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
271 if p then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
272 ex = ex - #q
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
273 sig = p..q
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
274 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
275 if sig + 0 == 0 then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
276 y = "0" -- basic zero
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
277 else
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
278 local v = #match(sig, "^0*") -- remove leading zeros
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
279 sig = sub(sig, v + 1)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
280 v = #match(sig, "0*$") -- shift out trailing zeros
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
281 if v > 0 then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
282 sig = sub(sig, 1, #sig - v)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
283 ex = ex + v
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
284 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
285 -- examine exponent and determine which format is best
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
286 local nex = base.tostring(ex)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
287 if ex == 0 then -- it's just an integer
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
288 y = sig
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
289 elseif ex > 0 and (ex <= 1 + #nex) then -- a number
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
290 y = sig..rep("0", ex)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
291 elseif ex < 0 and (ex >= -#sig) then -- fraction, e.g. .123
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
292 v = #sig + ex
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
293 y = sub(sig, 1, v).."."..sub(sig, v + 1)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
294 elseif ex < 0 and (#nex >= -ex - #sig) then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
295 -- e.g. compare 1234e-5 versus .01234
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
296 -- gives: #sig + 1 + #nex >= 1 + (-ex - #sig) + #sig
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
297 -- -> #nex >= -ex - #sig
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
298 v = -ex - #sig
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
299 y = "."..rep("0", v)..sig
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
300 else -- non-canonical scientific representation
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
301 y = sig.."e"..ex
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
302 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
303 end--if sig
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
304 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
305 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
306 if y and y ~= sinfos[i] then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
307 if opt_details then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
308 print("<number> (line "..stoklns[i]..") "..sinfos[i].." -> "..y)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
309 opt_details = opt_details + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
310 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
311 sinfos[i] = y
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
312 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
313 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
314
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
315 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
316 -- string optimization
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
317 -- * note: works on well-formed strings only!
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
318 -- * optimizations on characters can be summarized as follows:
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
319 -- \a\b\f\n\r\t\v -- no change
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
320 -- \\ -- no change
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
321 -- \"\' -- depends on delim, other can remove \
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
322 -- \[\] -- remove \
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
323 -- \<char> -- general escape, remove \
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
324 -- \<eol> -- normalize the EOL only
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
325 -- \ddd -- if \a\b\f\n\r\t\v, change to latter
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
326 -- if other < ascii 32, keep ddd but zap leading zeros
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
327 -- if >= ascii 32, translate it into the literal, then also
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
328 -- do escapes for \\,\",\' cases
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
329 -- <other> -- no change
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
330 -- * switch delimiters if string becomes shorter
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
331 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
332
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
333 local function do_string(I)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
334 local info = sinfos[I]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
335 local delim = sub(info, 1, 1) -- delimiter used
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
336 local ndelim = (delim == "'") and '"' or "'" -- opposite " <-> '
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
337 local z = sub(info, 2, -2) -- actual string
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
338 local i = 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
339 local c_delim, c_ndelim = 0, 0 -- "/' counts
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
340 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
341 while i <= #z do
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
342 local c = sub(z, i, i)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
343 ----------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
344 if c == "\\" then -- escaped stuff
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
345 local j = i + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
346 local d = sub(z, j, j)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
347 local p = find("abfnrtv\\\n\r\"\'0123456789", d, 1, true)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
348 ------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
349 if not p then -- \<char> -- remove \
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
350 z = sub(z, 1, i - 1)..sub(z, j)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
351 i = i + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
352 ------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
353 elseif p <= 8 then -- \a\b\f\n\r\t\v\\
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
354 i = i + 2 -- no change
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
355 ------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
356 elseif p <= 10 then -- \<eol> -- normalize EOL
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
357 local eol = sub(z, j, j + 1)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
358 if eol == "\r\n" or eol == "\n\r" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
359 z = sub(z, 1, i).."\n"..sub(z, j + 2)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
360 elseif p == 10 then -- \r case
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
361 z = sub(z, 1, i).."\n"..sub(z, j + 1)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
362 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
363 i = i + 2
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
364 ------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
365 elseif p <= 12 then -- \"\' -- remove \ for ndelim
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
366 if d == delim then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
367 c_delim = c_delim + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
368 i = i + 2
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
369 else
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
370 c_ndelim = c_ndelim + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
371 z = sub(z, 1, i - 1)..sub(z, j)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
372 i = i + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
373 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
374 ------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
375 else -- \ddd -- various steps
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
376 local s = match(z, "^(%d%d?%d?)", j)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
377 j = i + 1 + #s -- skip to location
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
378 local cv = s + 0
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
379 local cc = string.char(cv)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
380 local p = find("\a\b\f\n\r\t\v", cc, 1, true)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
381 if p then -- special escapes
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
382 s = "\\"..sub("abfnrtv", p, p)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
383 elseif cv < 32 then -- normalized \ddd
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
384 s = "\\"..cv
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
385 elseif cc == delim then -- \<delim>
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
386 s = "\\"..cc
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
387 c_delim = c_delim + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
388 elseif cc == "\\" then -- \\
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
389 s = "\\\\"
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
390 else -- literal character
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
391 s = cc
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
392 if cc == ndelim then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
393 c_ndelim = c_ndelim + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
394 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
395 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
396 z = sub(z, 1, i - 1)..s..sub(z, j)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
397 i = i + #s
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
398 ------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
399 end--if p
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
400 ----------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
401 else-- c ~= "\\" -- <other> -- no change
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
402 i = i + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
403 if c == ndelim then -- count ndelim, for switching delimiters
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
404 c_ndelim = c_ndelim + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
405 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
406 ----------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
407 end--if c
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
408 end--while
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
409 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
410 -- switching delimiters, a long-winded derivation:
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
411 -- (1) delim takes 2+2*c_delim bytes, ndelim takes c_ndelim bytes
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
412 -- (2) delim becomes c_delim bytes, ndelim becomes 2+2*c_ndelim bytes
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
413 -- simplifying the condition (1)>(2) --> c_delim > c_ndelim
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
414 if c_delim > c_ndelim then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
415 i = 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
416 while i <= #z do
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
417 local p, q, r = find(z, "([\'\"])", i)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
418 if not p then break end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
419 if r == delim then -- \<delim> -> <delim>
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
420 z = sub(z, 1, p - 2)..sub(z, p)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
421 i = p
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
422 else-- r == ndelim -- <ndelim> -> \<ndelim>
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
423 z = sub(z, 1, p - 1).."\\"..sub(z, p)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
424 i = p + 2
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
425 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
426 end--while
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
427 delim = ndelim -- actually change delimiters
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
428 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
429 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
430 z = delim..z..delim
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
431 if z ~= sinfos[I] then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
432 if opt_details then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
433 print("<string> (line "..stoklns[I]..") "..sinfos[I].." -> "..z)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
434 opt_details = opt_details + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
435 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
436 sinfos[I] = z
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
437 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
438 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
439
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
440 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
441 -- long string optimization
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
442 -- * note: warning flagged if trailing whitespace found, not trimmed
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
443 -- * remove first optional newline
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
444 -- * normalize embedded newlines
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
445 -- * reduce '=' separators in delimiters if possible
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
446 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
447
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
448 local function do_lstring(I)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
449 local info = sinfos[I]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
450 local delim1 = match(info, "^%[=*%[") -- cut out delimiters
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
451 local sep = #delim1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
452 local delim2 = sub(info, -sep, -1)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
453 local z = sub(info, sep + 1, -(sep + 1)) -- lstring without delims
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
454 local y = ""
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
455 local i = 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
456 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
457 while true do
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
458 local p, q, r, s = find(z, "([\r\n])([\r\n]?)", i)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
459 -- deal with a single line
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
460 local ln
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
461 if not p then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
462 ln = sub(z, i)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
463 elseif p >= i then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
464 ln = sub(z, i, p - 1)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
465 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
466 if ln ~= "" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
467 -- flag a warning if there are trailing spaces, won't optimize!
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
468 if match(ln, "%s+$") then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
469 warn.lstring = "trailing whitespace in long string near line "..stoklns[I]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
470 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
471 y = y..ln
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
472 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
473 if not p then -- done if no more EOLs
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
474 break
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
475 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
476 -- deal with line endings, normalize them
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
477 i = p + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
478 if p then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
479 if #s > 0 and r ~= s then -- skip CRLF or LFCR
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
480 i = i + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
481 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
482 -- skip first newline, which can be safely deleted
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
483 if not(i == 1 and i == p) then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
484 y = y.."\n"
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
485 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
486 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
487 end--while
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
488 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
489 -- handle possible deletion of one or more '=' separators
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
490 if sep >= 3 then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
491 local chk, okay = sep - 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
492 -- loop to test ending delimiter with less of '=' down to zero
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
493 while chk >= 2 do
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
494 local delim = "%]"..rep("=", chk - 2).."%]"
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
495 if not match(y, delim) then okay = chk end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
496 chk = chk - 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
497 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
498 if okay then -- change delimiters
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
499 sep = rep("=", okay - 2)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
500 delim1, delim2 = "["..sep.."[", "]"..sep.."]"
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
501 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
502 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
503 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
504 sinfos[I] = delim1..y..delim2
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
505 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
506
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
507 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
508 -- long comment optimization
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
509 -- * note: does not remove first optional newline
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
510 -- * trim trailing whitespace
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
511 -- * normalize embedded newlines
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
512 -- * reduce '=' separators in delimiters if possible
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
513 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
514
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
515 local function do_lcomment(I)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
516 local info = sinfos[I]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
517 local delim1 = match(info, "^%-%-%[=*%[") -- cut out delimiters
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
518 local sep = #delim1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
519 local delim2 = sub(info, -sep, -1)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
520 local z = sub(info, sep + 1, -(sep - 1)) -- comment without delims
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
521 local y = ""
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
522 local i = 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
523 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
524 while true do
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
525 local p, q, r, s = find(z, "([\r\n])([\r\n]?)", i)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
526 -- deal with a single line, extract and check trailing whitespace
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
527 local ln
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
528 if not p then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
529 ln = sub(z, i)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
530 elseif p >= i then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
531 ln = sub(z, i, p - 1)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
532 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
533 if ln ~= "" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
534 -- trim trailing whitespace if non-empty line
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
535 local ws = match(ln, "%s*$")
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
536 if #ws > 0 then ln = sub(ln, 1, -(ws + 1)) end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
537 y = y..ln
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
538 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
539 if not p then -- done if no more EOLs
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
540 break
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
541 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
542 -- deal with line endings, normalize them
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
543 i = p + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
544 if p then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
545 if #s > 0 and r ~= s then -- skip CRLF or LFCR
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
546 i = i + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
547 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
548 y = y.."\n"
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
549 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
550 end--while
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
551 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
552 -- handle possible deletion of one or more '=' separators
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
553 sep = sep - 2
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
554 if sep >= 3 then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
555 local chk, okay = sep - 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
556 -- loop to test ending delimiter with less of '=' down to zero
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
557 while chk >= 2 do
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
558 local delim = "%]"..rep("=", chk - 2).."%]"
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
559 if not match(y, delim) then okay = chk end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
560 chk = chk - 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
561 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
562 if okay then -- change delimiters
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
563 sep = rep("=", okay - 2)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
564 delim1, delim2 = "--["..sep.."[", "]"..sep.."]"
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
565 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
566 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
567 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
568 sinfos[I] = delim1..y..delim2
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
569 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
570
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
571 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
572 -- short comment optimization
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
573 -- * trim trailing whitespace
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
574 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
575
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
576 local function do_comment(i)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
577 local info = sinfos[i]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
578 local ws = match(info, "%s*$") -- just look from end of string
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
579 if #ws > 0 then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
580 info = sub(info, 1, -(ws + 1)) -- trim trailing whitespace
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
581 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
582 sinfos[i] = info
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
583 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
584
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
585 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
586 -- returns true if string found in long comment
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
587 -- * this is a feature to keep copyright or license texts
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
588 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
589
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
590 local function keep_lcomment(opt_keep, info)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
591 if not opt_keep then return false end -- option not set
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
592 local delim1 = match(info, "^%-%-%[=*%[") -- cut out delimiters
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
593 local sep = #delim1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
594 local delim2 = sub(info, -sep, -1)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
595 local z = sub(info, sep + 1, -(sep - 1)) -- comment without delims
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
596 if find(z, opt_keep, 1, true) then -- try to match
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
597 return true
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
598 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
599 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
600
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
601 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
602 -- main entry point
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
603 -- * currently, lexer processing has 2 passes
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
604 -- * processing is done on a line-oriented basis, which is easier to
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
605 -- grok due to the next point...
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
606 -- * since there are various options that can be enabled or disabled,
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
607 -- processing is a little messy or convoluted
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
608 ------------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
609
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
610 function optimize(option, toklist, semlist, toklnlist)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
611 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
612 -- set option flags
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
613 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
614 local opt_comments = option["opt-comments"]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
615 local opt_whitespace = option["opt-whitespace"]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
616 local opt_emptylines = option["opt-emptylines"]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
617 local opt_eols = option["opt-eols"]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
618 local opt_strings = option["opt-strings"]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
619 local opt_numbers = option["opt-numbers"]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
620 local opt_keep = option.KEEP
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
621 opt_details = option.DETAILS and 0 -- upvalues for details display
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
622 print = print or base.print
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
623 if opt_eols then -- forced settings, otherwise won't work properly
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
624 opt_comments = true
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
625 opt_whitespace = true
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
626 opt_emptylines = true
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
627 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
628 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
629 -- variable initialization
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
630 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
631 stoks, sinfos, stoklns -- set source lists
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
632 = toklist, semlist, toklnlist
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
633 local i = 1 -- token position
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
634 local tok, info -- current token
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
635 local prev -- position of last grammar token
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
636 -- on same line (for TK_SPACE stuff)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
637 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
638 -- changes a token, info pair
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
639 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
640 local function settoken(tok, info, I)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
641 I = I or i
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
642 stoks[I] = tok or ""
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
643 sinfos[I] = info or ""
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
644 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
645 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
646 -- processing loop (PASS 1)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
647 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
648 while true do
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
649 tok, info = stoks[i], sinfos[i]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
650 ----------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
651 local atstart = atlinestart(i) -- set line begin flag
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
652 if atstart then prev = nil end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
653 ----------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
654 if tok == "TK_EOS" then -- end of stream/pass
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
655 break
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
656 ----------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
657 elseif tok == "TK_KEYWORD" or -- keywords, identifiers,
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
658 tok == "TK_NAME" or -- operators
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
659 tok == "TK_OP" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
660 -- TK_KEYWORD and TK_OP can't be optimized without a big
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
661 -- optimization framework; it would be more of an optimizing
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
662 -- compiler, not a source code compressor
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
663 -- TK_NAME that are locals needs parser to analyze/optimize
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
664 prev = i
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
665 ----------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
666 elseif tok == "TK_NUMBER" then -- numbers
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
667 if opt_numbers then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
668 do_number(i) -- optimize
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
669 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
670 prev = i
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
671 ----------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
672 elseif tok == "TK_STRING" or -- strings, long strings
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
673 tok == "TK_LSTRING" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
674 if opt_strings then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
675 if tok == "TK_STRING" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
676 do_string(i) -- optimize
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
677 else
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
678 do_lstring(i) -- optimize
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
679 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
680 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
681 prev = i
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
682 ----------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
683 elseif tok == "TK_COMMENT" then -- short comments
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
684 if opt_comments then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
685 if i == 1 and sub(info, 1, 1) == "#" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
686 -- keep shbang comment, trim whitespace
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
687 do_comment(i)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
688 else
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
689 -- safe to delete, as a TK_EOL (or TK_EOS) always follows
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
690 settoken() -- remove entirely
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
691 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
692 elseif opt_whitespace then -- trim whitespace only
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
693 do_comment(i)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
694 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
695 ----------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
696 elseif tok == "TK_LCOMMENT" then -- long comments
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
697 if keep_lcomment(opt_keep, info) then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
698 ------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
699 -- if --keep, we keep a long comment if <msg> is found;
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
700 -- this is a feature to keep copyright or license texts
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
701 if opt_whitespace then -- trim whitespace only
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
702 do_lcomment(i)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
703 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
704 prev = i
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
705 elseif opt_comments then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
706 local eols = commenteols(info)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
707 ------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
708 -- prepare opt_emptylines case first, if a disposable token
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
709 -- follows, current one is safe to dump, else keep a space;
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
710 -- it is implied that the operation is safe for '-', because
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
711 -- current is a TK_LCOMMENT, and must be separate from a '-'
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
712 if is_faketoken[stoks[i + 1]] then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
713 settoken() -- remove entirely
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
714 tok = ""
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
715 else
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
716 settoken("TK_SPACE", " ")
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
717 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
718 ------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
719 -- if there are embedded EOLs to keep and opt_emptylines is
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
720 -- disabled, then switch the token into one or more EOLs
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
721 if not opt_emptylines and eols > 0 then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
722 settoken("TK_EOL", rep("\n", eols))
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
723 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
724 ------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
725 -- if optimizing whitespaces, force reinterpretation of the
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
726 -- token to give a chance for the space to be optimized away
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
727 if opt_whitespace and tok ~= "" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
728 i = i - 1 -- to reinterpret
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
729 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
730 ------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
731 else -- disabled case
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
732 if opt_whitespace then -- trim whitespace only
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
733 do_lcomment(i)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
734 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
735 prev = i
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
736 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
737 ----------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
738 elseif tok == "TK_EOL" then -- line endings
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
739 if atstart and opt_emptylines then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
740 settoken() -- remove entirely
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
741 elseif info == "\r\n" or info == "\n\r" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
742 -- normalize the rest of the EOLs for CRLF/LFCR only
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
743 -- (note that TK_LCOMMENT can change into several EOLs)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
744 settoken("TK_EOL", "\n")
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
745 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
746 ----------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
747 elseif tok == "TK_SPACE" then -- whitespace
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
748 if opt_whitespace then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
749 if atstart or atlineend(i) then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
750 -- delete leading and trailing whitespace
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
751 settoken() -- remove entirely
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
752 else
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
753 ------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
754 -- at this point, since leading whitespace have been removed,
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
755 -- there should be a either a real token or a TK_LCOMMENT
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
756 -- prior to hitting this whitespace; the TK_LCOMMENT case
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
757 -- only happens if opt_comments is disabled; so prev ~= nil
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
758 local ptok = stoks[prev]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
759 if ptok == "TK_LCOMMENT" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
760 -- previous TK_LCOMMENT can abut with anything
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
761 settoken() -- remove entirely
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
762 else
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
763 -- prev must be a grammar token; consecutive TK_SPACE
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
764 -- tokens is impossible when optimizing whitespace
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
765 local ntok = stoks[i + 1]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
766 if is_faketoken[ntok] then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
767 -- handle special case where a '-' cannot abut with
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
768 -- either a short comment or a long comment
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
769 if (ntok == "TK_COMMENT" or ntok == "TK_LCOMMENT") and
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
770 ptok == "TK_OP" and sinfos[prev] == "-" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
771 -- keep token
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
772 else
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
773 settoken() -- remove entirely
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
774 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
775 else--is_realtoken
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
776 -- check a pair of grammar tokens, if can abut, then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
777 -- delete space token entirely, otherwise keep one space
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
778 local s = checkpair(prev, i + 1)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
779 if s == "" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
780 settoken() -- remove entirely
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
781 else
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
782 settoken("TK_SPACE", " ")
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
783 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
784 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
785 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
786 ------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
787 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
788 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
789 ----------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
790 else
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
791 error("unidentified token encountered")
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
792 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
793 ----------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
794 i = i + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
795 end--while
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
796 repack_tokens()
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
797 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
798 -- processing loop (PASS 2)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
799 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
800 if opt_eols then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
801 i = 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
802 -- aggressive EOL removal only works with most non-grammar tokens
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
803 -- optimized away because it is a rather simple scheme -- basically
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
804 -- it just checks 'real' token pairs around EOLs
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
805 if stoks[1] == "TK_COMMENT" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
806 -- first comment still existing must be shbang, skip whole line
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
807 i = 3
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
808 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
809 while true do
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
810 tok, info = stoks[i], sinfos[i]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
811 --------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
812 if tok == "TK_EOS" then -- end of stream/pass
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
813 break
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
814 --------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
815 elseif tok == "TK_EOL" then -- consider each TK_EOL
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
816 local t1, t2 = stoks[i - 1], stoks[i + 1]
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
817 if is_realtoken[t1] and is_realtoken[t2] then -- sanity check
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
818 local s = checkpair(i - 1, i + 1)
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
819 if s == "" then
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
820 settoken() -- remove entirely
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
821 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
822 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
823 end--if tok
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
824 --------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
825 i = i + 1
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
826 end--while
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
827 repack_tokens()
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
828 end
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
829 --------------------------------------------------------------------
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
830 if opt_details and opt_details > 0 then print() end -- spacing
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
831 return stoks, sinfos, stoklns
2d9fe676e684 Add minify plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
832 end
93
07c10f9ba77c minify: Return _M from modules that weren't
Matthew Wild <mwild1@gmail.com>
parents: 1
diff changeset
833
07c10f9ba77c minify: Return _M from modules that weren't
Matthew Wild <mwild1@gmail.com>
parents: 1
diff changeset
834 return _M;

mercurial