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 deleted file mode 100644 index f36b7b6..0000000 --- a/sh/doc.awk +++ /dev/null @@ -1,83 +0,0 @@ -function append(line) { - if (doc) { - doc = doc "\n" - } - doc = doc line -} - -function output(name) { - print name - 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 -} - -{ - # 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 - } - # not doc - } 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 - printf "function: " - output(m[1]) - } else if (m[1] == target) { - printf "function: " - output(target) - } else { - reset() - } - } else { - if (module) { - printf "module: " - output(target) - } else { - reset() - } - } -} diff --git a/sh/main.awk b/sh/main.awk new file mode 100644 index 0000000..a64d8cd --- /dev/null +++ b/sh/main.awk @@ -0,0 +1,108 @@ +function append(line) { + if (doc) { + doc = doc "\n" + } + doc = doc line +} + +function output(name) { + print name + print doc + exit +} + +function reset() { + doc = "" +} + +BEGIN { + RE_ANY = "(.*)" + 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_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_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() + module = 0 +} + +{ + 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 (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() + 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 { + if (module) { + printf "module: " + output(target) + } else { + reset() + } + } + } +} diff --git a/sh/main.sh b/sh/main.sh index fb323d8..f2d7a7a 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}" # ╭──────┬──────╮ @@ -64,6 +65,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 +78,7 @@ rwx_cache() { local text text="$(cat "${path}")" # all source code - RWX_CODE="${RWX_CODE}\ + _rwx_code="${_rwx_code}\ #. ${name} ${text} " @@ -181,17 +185,31 @@ 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 <