summaryrefslogtreecommitdiff
path: root/headers.lua
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2024-06-30 23:50:21 +0200
committerAki <please@ignore.pl>2024-06-30 23:50:21 +0200
commitd6189e60851ff347c8c11812025232621f54096e (patch)
tree0c1694b98a80ef4dd4c0f04ee11ae62c4562d818 /headers.lua
parente2690e1cce87be317dd8169e93a59318b42e3b82 (diff)
downloadheaders-d6189e60851ff347c8c11812025232621f54096e.zip
headers-d6189e60851ff347c8c11812025232621f54096e.tar.gz
headers-d6189e60851ff347c8c11812025232621f54096e.tar.bz2
Split "DSL" definition from the "all-in-parser-and-output"
Diffstat (limited to 'headers.lua')
-rwxr-xr-xheaders.lua141
1 files changed, 14 insertions, 127 deletions
diff --git a/headers.lua b/headers.lua
index 13d98a9..972b360 100755
--- a/headers.lua
+++ b/headers.lua
@@ -1,130 +1,17 @@
#!/usr/bin/env lua
---- For example:
----
---- $ ./headers.lua db/c.lua C23
---- assert.h
---- ctype.h
---- ...
-local public = {}
-local private = {}
-private.tags = {}
-private.tags_lookup = {}
-private.headers = {}
-
-
-local tag do
- local methods = {}
- function methods:add (header)
- table.insert(self.headers_, header)
- end
- local function headers (self)
- local result = {}
- for _, value in pairs(self.headers_) do
- if type(value) == "function" then
- value(result)
- else
- table.insert(result, value)
- end
- end
- return result
- end
- local mt = {
- __tostring=function (self) return self.name end,
- __index=function (self, key)
- if key == "headers" then
- return headers(self)
- end
- return methods[key]
- end,
- }
- function tag (name)
- return setmetatable({name=name, headers_={}}, mt)
- end
-end
-
-
-local alias do
- local mt = {
- __tostring = function (self) return string.format("%s (%s)", self.name, tostring(self.tag)) end,
- __index = function (self, key) return self.tag[key] end,
- }
- function alias (name, tag)
- return setmetatable({name=name, tag=tag}, mt)
- end
-end
-
-
-local function include (source)
- return function (target)
- for _, header in pairs(source.headers) do
- table.insert(target, header)
- end
- end
-end
-
-
-local function remove (header)
- return function (target)
- for key, value in pairs(target) do
- if value == header then
- table.remove(target, key)
- end
- end
- end
-end
-
-
-local function get_or_create_tag (name)
- local found = private.tags_lookup[name]
- if not found then
- found = tag(name)
- table.insert(private.tags, found)
- private.tags_lookup[name] = found
- end
- return found
-end
-
-
-function public.aliases (name)
- local tag = get_or_create_tag(name)
- return function (aliases)
- for _, name in pairs(aliases) do
- private.tags_lookup[name] = alias(name, tag)
- end
- end
-end
-
-
-function public.headers (name)
- local tag = get_or_create_tag(name)
- return function (filenames)
- for _, header in pairs(filenames) do
- tag:add(header)
- end
- end
-end
-
-
-function public.include (tag)
- tag = private.tags_lookup[tag] or error("invalid tag: " .. tag, 2)
- return include(tag)
-end
-
-
-function public.remove (header)
- return remove(header)
-end
-
-
-local db = loadfile(arg[1], nil, public)
-db()
-if arg[2] then
- local tag = private.tags_lookup[arg[2]]
- for _, header in pairs(tag.headers) do
- print(header)
- end
-else
- for _, tag in pairs(private.tags_lookup) do
- print(tag)
+local args = require "pl.lapp" [[
+Prints list of headers from a standard or available standards
+ -d (string default 'db/') Directory where definitions are placed
+ <selection> (optional string) Standard to display headers for
+]]
+local dir = require "pl.dir"
+local parse = require "headers.parser"
+local definitions = dir.getfiles(args.d, "*.lua")
+for _, filename in pairs(definitions) do
+ local handle = io.open(filename)
+ local data = handle:read("a")
+ handle:close()
+ if parse(data, args.selection) then
+ return -- interface is yet to be properly defined, this allows only for first-result queries
end
end