From 3216f11da0db71b9b6b1ad06602e004f7a105384 Mon Sep 17 00:00:00 2001 From: Marc Beninca Date: Sun, 6 Jul 2025 03:16:41 +0200 Subject: [PATCH] attempt from scratch --- sh/doc.awk | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ sh/main.sh | 1 + sh/self.sh | 3 ++- 3 files changed, 76 insertions(+), 1 deletion(-) diff --git a/sh/doc.awk b/sh/doc.awk index e69de29..c2cb5b8 100644 --- a/sh/doc.awk +++ b/sh/doc.awk @@ -0,0 +1,73 @@ +function append(line) { + if (doc) { + doc = doc "\n" + } + doc = doc line +} + +function output(name) { + print name + print "↓" + print doc + exit +} + +function reset() { + doc = "" +} + +BEGIN { + RE_ANY = "(.*)" + RE_NAME = "([_A-Za-z][_0-9A-Za-z]*)" + RE_SPACE = "[[:space:]]" + RE_SPACES = RE_SPACE "*" + + RE_BEGIN = "^" + RE_END = RE_SPACES "$" + RE_FUNC = RE_SPACES "\\(" RE_SPACES "\\)" RE_SPACES "{" + + RE_ALIAS = RE_BEGIN "#\\(" RE_SPACES RE_NAME RE_END + RE_DOC = RE_BEGIN "#" RE_SPACE RE_ANY RE_END + RE_FUNCTION = RE_BEGIN RE_NAME RE_FUNC RE_END + RE_MODULE = RE_BEGIN "#." RE_SPACES RE_NAME RE_END + RE_SET = RE_BEGIN RE_NAME "=.*" RE_END + RE_SHEBANG = RE_BEGIN "#!" RE_SPACES RE_ANY RE_END + + alias = 0 + reset() + module = 0 +} + +{ + if (match($0, RE_MODULE, m)) { + reset() + if (m[1] == target) { + module = 1 + } + } else if (match($0, RE_SHEBANG, m)) { + append(m[1]) + } else if (match($0, RE_DOC, m)) { + append(m[1]) + } else if (match($0, RE_SET, m)) { + if (m[1] == target) { + output(m[1]) + } else { + reset() + } + } else if (match($0, RE_ALIAS, m)) { + if (m[1] == target) { + alias = 1 + } + append(m[1]) + } else if (match($0, RE_FUNCTION, m)) { + if (alias) { + output(m[1]) + } else if (m[1] == target) { + output(m[1]) + } else { + reset() + } + } else { + reset() + } +} diff --git a/sh/main.sh b/sh/main.sh index 343cbe3..d4ad2e2 100755 --- a/sh/main.sh +++ b/sh/main.sh @@ -64,6 +64,7 @@ rwx_main() { # ╰──────┴───────╯ # cache source code of a module +# inside a global code variable rwx_cache() { local root="${1}" local module="${2}" diff --git a/sh/self.sh b/sh/self.sh index ac2382f..169921a 100644 --- a/sh/self.sh +++ b/sh/self.sh @@ -1,4 +1,5 @@ -# self module +# self +# module # meta doc rwx_doc() {