From 1b077ac89a6fc239e6575ee1c333969137f9433e Mon Sep 17 00:00:00 2001 From: Marc Beninca Date: Sun, 6 Jul 2025 05:31:51 +0200 Subject: [PATCH 1/4] const,set,var --- sh/alias/git.sh | 2 ++ sh/doc.awk | 37 ++++++++++++++++++++++++------------- sh/main.sh | 2 +- 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/sh/alias/git.sh b/sh/alias/git.sh index 3e6386e..4519028 100644 --- a/sh/alias/git.sh +++ b/sh/alias/git.sh @@ -1,3 +1,5 @@ +# large set of aliases for git commands + RWX_GIT_LOG_FORMAT="\ %C(auto)%h%d S %C(red)%GS diff --git a/sh/doc.awk b/sh/doc.awk index f36b7b6..8763b76 100644 --- a/sh/doc.awk +++ b/sh/doc.awk @@ -17,20 +17,23 @@ function reset() { BEGIN { RE_ANY = "(.*)" - RE_NAME = "([_A-Za-z][_0-9A-Za-z]*)" + RE_CONST = "([_A-Z][_0-9A-Z]*)" + RE_SET = "=.*" RE_SPACE = "[[:space:]]" RE_SPACES = RE_SPACE "*" + RE_VAR = "([_a-z][_0-9a-z]*)" 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_ALIAS = RE_BEGIN "#\\(" RE_SPACES RE_VAR RE_END + RE_CONSTANT = RE_BEGIN RE_CONST RE_SET 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_FUNCTION = RE_BEGIN RE_VAR RE_FUNC RE_END + RE_MODULE = RE_BEGIN "#." RE_SPACES RE_ANY RE_END RE_SHEBANG = RE_BEGIN "#!" RE_SPACES RE_ANY RE_END + RE_VARIABLE = RE_BEGIN RE_VAR RE_SET RE_END alias = 0 reset() @@ -48,19 +51,27 @@ BEGIN { if (m[1] == target) { alias = 1 } - # not doc + # set + } else if (match($0, RE_CONSTANT, m)) { + if (m[1] == target) { + printf "constant: " + output(m[1]) + } else { + reset() + } + } else if (match($0, RE_VARIABLE, m)) { + if (m[1] == target) { + printf "variable: " + output(m[1]) + } else { + reset() + } + # others } else if (match($0, RE_MODULE, m)) { reset() if (m[1] == target) { module = 1 } - } else if (match($0, RE_SET, m)) { - if (m[1] == target) { - printf "set: " - output(m[1]) - } else { - reset() - } } else if (match($0, RE_FUNCTION, m)) { if (alias) { print "alias: " target diff --git a/sh/main.sh b/sh/main.sh index fb323d8..9629b27 100755 --- a/sh/main.sh +++ b/sh/main.sh @@ -207,7 +207,7 @@ rwx_test() { # TODO variables set \ "main" \ - "self" \ + "alias/git" \ \ "RWX_MAIN_NAME" \ \ From 0ef18c113e23b8faca2f021cb22e27978279e5f4 Mon Sep 17 00:00:00 2001 From: Marc Beninca Date: Sun, 6 Jul 2025 05:59:23 +0200 Subject: [PATCH 2/4] _rwx_code --- sh/main.sh | 11 ++++++++--- sh/self.sh | 4 ++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/sh/main.sh b/sh/main.sh index 9629b27..c7f34e4 100755 --- a/sh/main.sh +++ b/sh/main.sh @@ -64,6 +64,9 @@ rwx_main() { # │ main │ cache │ # ╰──────┴───────╯ +# cache of all sourced code modules +_rwx_code="" + # cache source code of a module # inside a global code variable rwx_cache() { @@ -74,7 +77,7 @@ rwx_cache() { local text text="$(cat "${path}")" # all source code - RWX_CODE="${RWX_CODE}\ + _rwx_code="${_rwx_code}\ #. ${name} ${text} " @@ -187,11 +190,11 @@ rwx_parse_code() { RWX_FUNCTIONS="$(rwx_parse_functions)" } rwx_parse_constants() { - printf "%s\n" "${RWX_CODE}" | + printf "%s\n" "${_rwx_code}" | sed --silent "s|${RWX_REGEX_TARGET_CONSTANT}|\\1|p" } rwx_parse_functions() { - printf "%s\n" "${RWX_CODE}" | + printf "%s\n" "${_rwx_code}" | sed --silent "s|${RWX_REGEX_TARGET_FUNCTION}|\\1|p" } @@ -211,6 +214,8 @@ rwx_test() { \ "RWX_MAIN_NAME" \ \ + "_rwx_code" \ + \ "rwx_cache" \ \ "gsc" diff --git a/sh/self.sh b/sh/self.sh index 169921a..cc10d56 100644 --- a/sh/self.sh +++ b/sh/self.sh @@ -5,7 +5,7 @@ rwx_doc() { local name="${1}" [ -n "${name}" ] || return - printf "%s" "${RWX_CODE}" | + printf "%s" "${_rwx_code}" | awk \ -f "${RWX_ROOT_SYSTEM}/doc.awk" \ -v target="${name}" @@ -55,7 +55,7 @@ rwx_doc_old() { ;; esac done < Date: Sun, 6 Jul 2025 06:08:39 +0200 Subject: [PATCH 3/4] main.awk --- sh/{doc.awk => main.awk} | 0 sh/main.sh | 1 + sh/self.sh | 4 ++-- 3 files changed, 3 insertions(+), 2 deletions(-) rename sh/{doc.awk => main.awk} (100%) diff --git a/sh/doc.awk b/sh/main.awk similarity index 100% rename from sh/doc.awk rename to sh/main.awk diff --git a/sh/main.sh b/sh/main.sh index c7f34e4..a4cec6e 100755 --- a/sh/main.sh +++ b/sh/main.sh @@ -32,6 +32,7 @@ esac RWX_ROOT_SYSTEM="/usr/local/lib/${RWX_SELF_NAME}" RWX_SELF_USER="${HOME}/${RWX_SELF_NAME}" +RWX_AWK="${RWX_ROOT_SYSTEM}/${RWX_MAIN_NAME%.sh}.awk" RWX_MAIN_PATH="${RWX_ROOT_SYSTEM}/${RWX_MAIN_NAME}" # ╭──────┬──────╮ diff --git a/sh/self.sh b/sh/self.sh index cc10d56..bfeeb10 100644 --- a/sh/self.sh +++ b/sh/self.sh @@ -7,8 +7,8 @@ rwx_doc() { [ -n "${name}" ] || return printf "%s" "${_rwx_code}" | awk \ - -f "${RWX_ROOT_SYSTEM}/doc.awk" \ - -v target="${name}" + --assign target="${name}" \ + --file "${RWX_AWK}" } rwx_doc_old() { From 1467c1158a31d8d9408b21f573bfe7cd6c2fc2bb Mon Sep 17 00:00:00 2001 From: Marc Beninca Date: Sun, 6 Jul 2025 06:41:44 +0200 Subject: [PATCH 4/4] action/alias,doc --- sh/main.awk | 100 ++++++++++++++++++++++++++++++---------------------- sh/main.sh | 14 ++++++++ sh/self.sh | 1 + 3 files changed, 72 insertions(+), 43 deletions(-) diff --git a/sh/main.awk b/sh/main.awk index 8763b76..a64d8cd 100644 --- a/sh/main.awk +++ b/sh/main.awk @@ -41,54 +41,68 @@ BEGIN { } { - # doc - if (match($0, RE_SHEBANG, m)) { - append("shebang: " m[1]) - } else if (match($0, RE_DOC, m)) { - append(m[1]) - } else if (match($0, RE_ALIAS, m)) { - append("alias: " m[1]) - if (m[1] == target) { - alias = 1 - } - # set - } else if (match($0, RE_CONSTANT, m)) { - if (m[1] == target) { - printf "constant: " - output(m[1]) + if (action == "alias") { + if (match($0, RE_ALIAS, m)) { + append(m[1]) + } else if (match($0, RE_FUNCTION, m)) { + n = split(doc, array, "\n") + for (i = 1; i<= n; i++) { + print array[i] "() { " m[1] " \"${@}\" ; }" + } + reset() } else { reset() } - } else if (match($0, RE_VARIABLE, m)) { - if (m[1] == target) { - printf "variable: " - output(m[1]) - } else { + } else if (action == "doc") { + # doc + if (match($0, RE_SHEBANG, m)) { + append("shebang: " m[1]) + } else if (match($0, RE_DOC, m)) { + append(m[1]) + } else if (match($0, RE_ALIAS, m)) { + append("alias: " m[1]) + if (m[1] == target) { + alias = 1 + } + # set + } else if (match($0, RE_CONSTANT, m)) { + if (m[1] == target) { + printf "constant: " + output(m[1]) + } else { + reset() + } + } else if (match($0, RE_VARIABLE, m)) { + if (m[1] == target) { + printf "variable: " + output(m[1]) + } else { + reset() + } + # others + } else if (match($0, RE_MODULE, m)) { reset() - } - # others - } else if (match($0, RE_MODULE, m)) { - reset() - if (m[1] == target) { - module = 1 - } - } else if (match($0, RE_FUNCTION, m)) { - if (alias) { - print "alias: " target - printf "function: " - output(m[1]) - } else if (m[1] == target) { - printf "function: " - output(target) + if (m[1] == target) { + module = 1 + } + } else if (match($0, RE_FUNCTION, m)) { + if (alias) { + print "alias: " target + printf "function: " + output(m[1]) + } else if (m[1] == target) { + printf "function: " + output(target) + } else { + reset() + } } else { - reset() - } - } else { - if (module) { - printf "module: " - output(target) - } else { - reset() + if (module) { + printf "module: " + output(target) + } else { + reset() + } } } } diff --git a/sh/main.sh b/sh/main.sh index a4cec6e..f2d7a7a 100755 --- a/sh/main.sh +++ b/sh/main.sh @@ -185,11 +185,25 @@ RWX_REGEX_TARGET_FUNCTION="\ ${RWX_REGEX_BEGIN}\\(${RWX_REGEX_FUNCTION}\\)${RWX_REGEX_OPEN}" rwx_parse_code() { + # parse aliases + local line + RWX_ALIASES="$(rwx_parse_aliases)" + while IFS= read -r line; do + eval "${line}" + done <