diff --git a/sh/main.sh b/sh/main.sh index 4cd27ae..8d950b0 100755 --- a/sh/main.sh +++ b/sh/main.sh @@ -46,6 +46,8 @@ rwx_main() { fi # source user root rwx_source "${RWX_SELF_USER}" + # parse code cache + rwx_parse # context / command if [ -n "${RWX_COMMAND_NAME}" ]; then "${RWX_SELF_COMMAND}${RWX_COMMAND_NAME}" "${@}" @@ -195,6 +197,36 @@ rwx_find_shell() { rwx_find_extension "sh" "${@}" } +# ╭──────┬───────╮ +# │ main │ parse │ +# ╰──────┴───────╯ + +rwx_parse() { + local ws="[[:space:]]*" + local start="^${ws}" + local constant="[_A-Z][_0-9A-Z]*" + local setting="=.*" + local func="${ws}(${ws})${ws}{.*" + local id="[_a-zA-Z][_a-z0-9A-Z]*" + local line + rwx_ifs_set + RWX_CONSTANTS="" + for line in $(echo "${RWX_CODE}" | + grep "${start}${constant}${setting}" | + sed "s|${start}\\(${constant}\\)${setting}|\\1|"); do + RWX_CONSTANTS="${RWX_CONSTANTS}${line} +" + done + RWX_FUNCTIONS="" + for line in $(echo "${RWX_CODE}" | + grep "${start}${id}${func}" | + sed "s|${start}\\(${id}\\)${func}|\\1|"); do + RWX_FUNCTIONS="${RWX_FUNCTIONS}${line} +" + done + rwx_ifs_unset +} + # ╭──────┬─────╮ # │ main │ run │ # ╰──────┴─────╯