69 lines
1.6 KiB
Lua
Executable File
69 lines
1.6 KiB
Lua
Executable File
-- Sort selected areas of a text file
|
|
--
|
|
-- Each area has a number of sections,
|
|
-- and each section has a headline that
|
|
-- is used as a key.
|
|
--
|
|
-- The program simply treats each section as a string, and treats each area as a
|
|
-- collection of strings. The strings are sorted such that the sections in
|
|
-- the area will appear in order.
|
|
--
|
|
-- For now, only asciidoc (and markdown) headlines are supported, but
|
|
-- description lists are on the way
|
|
--
|
|
-- TODO:
|
|
-- Variables and substitutions with evaluation via dostring
|
|
-- Syntax for settings vars could be
|
|
-- {{? mufassa = "tjams" }}
|
|
-- {{? mufassa tjams }}
|
|
--
|
|
-- Syntax for inserting vars could be
|
|
-- {{:: string.upper(mufassa) }}
|
|
-- my little pony is {{: mufassa .. " næsehorn "}}
|
|
--
|
|
-- Can assist in streamlining data across the three guides.
|
|
-- Can ease links.
|
|
--
|
|
-- Maybe a quick var insert:
|
|
-- @@@mufassa (inserts the contents of mufassa variable)
|
|
--
|
|
|
|
local filename = arg[1]
|
|
|
|
-- Check that a filename was given
|
|
if arg[1] == nil then
|
|
print(string.format("usage: %s [filename]", arg[0]))
|
|
os.exit(0)
|
|
end
|
|
|
|
-- Check that file exists
|
|
local f = io.open(filename, "r+")
|
|
if not f then
|
|
print(string.format("file '%s' does not exist", filename))
|
|
os.exit(1)
|
|
end
|
|
|
|
local sorter = require("sorter")
|
|
local sorted = sorter(f:lines())
|
|
|
|
if arg[2] == "--overwrite" then
|
|
--
|
|
-- Check if there were any changes to the file.
|
|
f:seek("set")
|
|
if sorted == f:read("a*") then
|
|
print("No sorting needed. Closing file")
|
|
f:close()
|
|
os.exit(0)
|
|
end
|
|
|
|
f:seek("set")
|
|
f:write(sorted)
|
|
f:flush()
|
|
f:close()
|
|
os.exit(0)
|
|
end
|
|
|
|
f:close()
|
|
|
|
print(sorted)
|