diff --git a/sh/main.sh b/sh/main.sh index 8e76ad4..48e7f08 100755 --- a/sh/main.sh +++ b/sh/main.sh @@ -49,7 +49,7 @@ rwx_main() { # source user root rwx_source "${RWX_SELF_USER}" # parse code cache - rwx_parse_code + rwx_parse # context / command if [ -n "${RWX_COMMAND_NAME}" ]; then "${RWX_SELF_COMMAND}${RWX_COMMAND_NAME}" "${@}" @@ -163,30 +163,30 @@ rwx_find_shell() { # │ main │ parse │ # ╰──────┴───────╯ -RWX_REGEX_CONSTANT="[_A-Z][_0-9A-Z]*" -RWX_REGEX_FUNCTION="[_A-Za-z][_0-9A-Za-z]*" -RWX_REGEX_SET="=.*" -RWX_REGEX_SPACES="[[:space:]]*" - -RWX_REGEX_BEGIN="^${RWX_REGEX_SPACES}" -RWX_REGEX_OPEN="\ -${RWX_REGEX_SPACES}(${RWX_REGEX_SPACES})${RWX_REGEX_SPACES}{.*" - -rwx_parse_code() { - # parse constants - RWX_CONSTANTS="$(rwx_parse_constants)" - # parse functions - RWX_FUNCTIONS="$(rwx_parse_functions)" -} -rwx_parse_constants() { +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_CONSTANTS="" printf "%s\n" "${RWX_CODE}" | - grep "${RWX_REGEX_BEGIN}${RWX_REGEX_CONSTANT}${RWX_REGEX_SET}" | - sed "s|${RWX_REGEX_BEGIN}\\(${RWX_REGEX_CONSTANT}\\)${RWX_REGEX_SET}|\\1|" -} -rwx_parse_functions() { + grep "${start}${constant}${setting}" | + sed "s|${start}\\(${constant}\\)${setting}|\\1|" | + while IFS= read -r line; do + RWX_CONSTANTS="${RWX_CONSTANTS}${line} +" + done + RWX_FUNCTIONS="" printf "%s\n" "${RWX_CODE}" | - grep "${RWX_REGEX_BEGIN}${RWX_REGEX_FUNCTION}${RWX_REGEX_OPEN}" | - sed "s|${RWX_REGEX_BEGIN}\\(${RWX_REGEX_FUNCTION}\\)${RWX_REGEX_OPEN}|\\1|" + grep "${start}${id}${func}" | + sed "s|${start}\\(${id}\\)${func}|\\1|" | + while IFS= read -r line; do + RWX_FUNCTIONS="${RWX_FUNCTIONS}${line} +" + done } # ╭──────┬─────╮