| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 | #!/usr/bin/env lualocal fennel_dir = arg[0]:match("(.-)[^\\/]+$")package.path = fennel_dir .. "?.lua;" .. package.pathlocal fennel = require('fennel')local help = [[Usage: fennel [FLAG] [FILE]  --repl          :  Launch an interactive repl session  --compile FILES :  Compile files and write their Lua to stdout  --help          :  Display this text  When not given a flag, runs the file given as the first argument.]]local options = {    sourcemap = true,}local function dosafe(filename, opts, arg1)    local ok, val = xpcall(function()        return fennel.dofile(filename, opts, arg1)    end, fennel.traceback)    if not ok then        print(val)        os.exit(1)    end    return valendlocal compileOptHandlers = {    ['--indent'] = function ()        options.indent = table.remove(arg, 3)        if options.indent == "false" then options.indent = false end        table.remove(arg, 2)    end,    ['--sourcemap'] = function ()        options.sourcemap = table.remove(arg, 3)        if options.sourcemap == "false" then options.sourcemap = false end        table.remove(arg, 2)    end,    ['--correlate'] = function ()        options.correlate = true        table.remove(arg, 2)    end,}if arg[1] == "--repl" or #arg == 0 then    local ppok, pp = pcall(fennel.dofile, fennel_dir .. "fennelview.fnl", options)    if ppok then        options.pp = pp    end    local initFilename = (os.getenv("HOME") or "") .. "/.fennelrc"    local init = io.open(initFilename, "rb")    if init then        init:close()        -- pass in options so fennerlrc can make changes to it        dosafe(initFilename, options, options)    end    print("Welcome to fennel!")    fennel.repl(options)elseif arg[1] == "--compile" then    -- Handle options    while compileOptHandlers[arg[2]] do        compileOptHandlers[arg[2]]()    end    for i = 2, #arg do        local f = assert(io.open(arg[i], "rb"))        options.filename=arg[i]        local ok, val = xpcall(function()            return fennel.compileString(f:read("*all"), options)        end, fennel.traceback)        print(val)        if not ok then os.exit(1) end        f:close()    endelseif #arg >= 1 and arg[1] ~= "--help" then    local filename = table.remove(arg, 1) -- let the script have remaining args    dosafe(filename)else    print(help)end
 |