Thu, 08 Jul 2010 01:11:40 +0100
make_squishy: Fix traceback when file doesn't contain any path component
1 | 1 | local optlex = require "optlex" |
2 | local optparser = require "optparser" | |
3 | local llex = require "llex" | |
4 | local lparser = require "lparser" | |
5 | ||
6 | local minify_defaults = { | |
7 | none = {}; | |
30
802e22257a9e
minify: Add debug level, add warnings when specified level not valid, don't override options with defaults
Matthew Wild <mwild1@gmail.com>
parents:
27
diff
changeset
|
8 | debug = { "whitespace", "locals", "entropy", "comments", "numbers" }; |
1 | 9 | default = { "comments", "whitespace", "emptylines", "numbers", "locals" }; |
10 | basic = { "comments", "whitespace", "emptylines" }; | |
30
802e22257a9e
minify: Add debug level, add warnings when specified level not valid, don't override options with defaults
Matthew Wild <mwild1@gmail.com>
parents:
27
diff
changeset
|
11 | full = { "comments", "whitespace", "emptylines", "eols", "strings", "numbers", "locals", "entropy" }; |
1 | 12 | } |
13 | ||
30
802e22257a9e
minify: Add debug level, add warnings when specified level not valid, don't override options with defaults
Matthew Wild <mwild1@gmail.com>
parents:
27
diff
changeset
|
14 | if opts.minify_level and not minify_defaults[opts.minify_level] then |
802e22257a9e
minify: Add debug level, add warnings when specified level not valid, don't override options with defaults
Matthew Wild <mwild1@gmail.com>
parents:
27
diff
changeset
|
15 | print_err("Unknown minify level: "..opts.minify_level); |
802e22257a9e
minify: Add debug level, add warnings when specified level not valid, don't override options with defaults
Matthew Wild <mwild1@gmail.com>
parents:
27
diff
changeset
|
16 | print_err("Available minify levels: none, basic, default, full, debug"); |
802e22257a9e
minify: Add debug level, add warnings when specified level not valid, don't override options with defaults
Matthew Wild <mwild1@gmail.com>
parents:
27
diff
changeset
|
17 | end |
1 | 18 | for _, opt in ipairs(minify_defaults[opts.minify_level or "default"] or {}) do |
30
802e22257a9e
minify: Add debug level, add warnings when specified level not valid, don't override options with defaults
Matthew Wild <mwild1@gmail.com>
parents:
27
diff
changeset
|
19 | if opts["minify_"..opt] == nil then |
802e22257a9e
minify: Add debug level, add warnings when specified level not valid, don't override options with defaults
Matthew Wild <mwild1@gmail.com>
parents:
27
diff
changeset
|
20 | opts["minify_"..opt] = true; |
802e22257a9e
minify: Add debug level, add warnings when specified level not valid, don't override options with defaults
Matthew Wild <mwild1@gmail.com>
parents:
27
diff
changeset
|
21 | end |
1 | 22 | end |
23 | ||
24 | local option = { | |
25 | ["opt-locals"] = opts.minify_locals; | |
26 | ["opt-comments"] = opts.minify_comments; | |
27 | ["opt-entropy"] = opts.minify_entropy; | |
28 | ["opt-whitespace"] = opts.minify_whitespace; | |
29 | ["opt-emptylines"] = opts.minify_emptylines; | |
30 | ["opt-eols"] = opts.minify_eols; | |
31 | ["opt-strings"] = opts.minify_strings; | |
32 | ["opt-numbers"] = opts.minify_numbers; | |
33 | } | |
34 | ||
35 | local function die(msg) | |
6
c51cb63e428f
minify: Update error output to use print_err, and os.exit(1)
Matthew Wild <mwild1@gmail.com>
parents:
5
diff
changeset
|
36 | print_err("minify: "..msg); os.exit(1); |
1 | 37 | end |
38 | ||
39 | local function load_file(fname) | |
40 | local INF = io.open(fname, "rb") | |
41 | if not INF then die("cannot open \""..fname.."\" for reading") end | |
42 | local dat = INF:read("*a") | |
43 | if not dat then die("cannot read from \""..fname.."\"") end | |
44 | INF:close() | |
45 | return dat | |
46 | end | |
47 | ||
48 | local function save_file(fname, dat) | |
49 | local OUTF = io.open(fname, "wb") | |
50 | if not OUTF then die("cannot open \""..fname.."\" for writing") end | |
51 | local status = OUTF:write(dat) | |
52 | if not status then die("cannot write to \""..fname.."\"") end | |
53 | OUTF:close() | |
54 | end | |
55 | ||
56 | ||
27
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
57 | function minify_string(dat) |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
58 | llex.init(dat) |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
59 | llex.llex() |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
60 | local toklist, seminfolist, toklnlist |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
61 | = llex.tok, llex.seminfo, llex.tokln |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
62 | if option["opt-locals"] then |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
63 | optparser.print = print -- hack |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
64 | lparser.init(toklist, seminfolist, toklnlist) |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
65 | local globalinfo, localinfo = lparser.parser() |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
66 | optparser.optimize(option, toklist, seminfolist, globalinfo, localinfo) |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
67 | end |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
68 | optlex.print = print -- hack |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
69 | toklist, seminfolist, toklnlist |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
70 | = optlex.optimize(option, toklist, seminfolist, toklnlist) |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
71 | local dat = table.concat(seminfolist) |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
72 | -- depending on options selected, embedded EOLs in long strings and |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
73 | -- long comments may not have been translated to \n, tack a warning |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
74 | if string.find(dat, "\r\n", 1, 1) or |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
75 | string.find(dat, "\n\r", 1, 1) then |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
76 | optlex.warn.mixedeol = true |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
77 | end |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
78 | return dat; |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
79 | end |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
80 | |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
81 | function minify_file(srcfl, destfl) |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
82 | local z = load_file(srcfl); |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
83 | z = minify_string(z); |
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
84 | save_file(destfl, z); |
1 | 85 | end |
86 | ||
7
0db12f8037f7
minify: Don't minify if --no-minify option set
Matthew Wild <mwild1@gmail.com>
parents:
6
diff
changeset
|
87 | if opts.minify ~= false then |
0db12f8037f7
minify: Don't minify if --no-minify option set
Matthew Wild <mwild1@gmail.com>
parents:
6
diff
changeset
|
88 | print_info("Minifying "..out_fn.."..."); |
27
0718b469099d
minify: Break into minify_file and minify_string to allow easier re-use
Matthew Wild <mwild1@gmail.com>
parents:
7
diff
changeset
|
89 | minify_file(out_fn, out_fn); |
7
0db12f8037f7
minify: Don't minify if --no-minify option set
Matthew Wild <mwild1@gmail.com>
parents:
6
diff
changeset
|
90 | print_info("OK!"); |
0db12f8037f7
minify: Don't minify if --no-minify option set
Matthew Wild <mwild1@gmail.com>
parents:
6
diff
changeset
|
91 | end |