diff --git a/sh/alias/git.sh b/sh/alias/git.sh index 4519028..3e6386e 100644 --- a/sh/alias/git.sh +++ b/sh/alias/git.sh @@ -1,5 +1,3 @@ -# 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 new file mode 100644 index 0000000..f36b7b6 --- /dev/null +++ b/sh/doc.awk @@ -0,0 +1,83 @@ +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 deleted file mode 100644 index a64d8cd..0000000 --- a/sh/main.awk +++ /dev/null @@ -1,108 +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_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 f2d7a7a..fb323d8 100755 --- a/sh/main.sh +++ b/sh/main.sh @@ -32,7 +32,6 @@ 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}" # ╭──────┬──────╮ @@ -65,9 +64,6 @@ 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() { @@ -78,7 +74,7 @@ rwx_cache() { local text text="$(cat "${path}")" # all source code - _rwx_code="${_rwx_code}\ + RWX_CODE="${RWX_CODE}\ #. ${name} ${text} " @@ -185,31 +181,17 @@ 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 <