summaryrefslogtreecommitdiff
path: root/bos-namespaces.sh
diff options
context:
space:
mode:
Diffstat (limited to 'bos-namespaces.sh')
-rw-r--r--bos-namespaces.sh41
1 files changed, 22 insertions, 19 deletions
diff --git a/bos-namespaces.sh b/bos-namespaces.sh
index d36b87e..32be36d 100644
--- a/bos-namespaces.sh
+++ b/bos-namespaces.sh
@@ -2,38 +2,41 @@
## namespace handling
function bos-namespaces/encode-into() {
- local -n result="$1"
- local string="$2"
+ local -n result="$1"; shift
local idx char tmp
result=''
- for (( idx=0 ; idx < "${#string}" ; ++idx )); do
- char="${string:$idx:1}"
- case "$char" in
- [0-9A-Za-z]) tmp="$char";;
- *) printf -v tmp _%02x "'$char"
- esac
- result+="$tmp"
+ while [[ "${#*}" -gt 0 ]]; do
+ for (( idx=0 ; idx < "${#1}" ; ++idx )); do
+ char="${1:$idx:1}"
+ case "$char" in
+ [0-9A-Za-z]) tmp="$char";;
+ *) printf -v tmp _%02x "'$char"
+ esac
+ result+="$tmp"
+ done
+ result+='__'
+ shift
done
}
function bos-namespaces/store-scalar-for-into() {
- local -n result="$1"
- local name; bos-namespaces/encode-into name "bos_${3}_${2}"
+ local -n result="$1"; shift
+ local name; bos-namespaces/encode-into name "bos" "$@"
declare -g "$name"
result="$name"
}
function bos-namespaces/store-array-for-into() {
- local -n result="$1"
- local name; bos-namespaces/encode-into name "bos_${3}_${2}"
+ local -n result="$1"; shift
+ local name; bos-namespaces/encode-into name "bos" "$@"
declare -ga "$name"
result="$name"
}
-function bos-namespaces/store-dict-for-into() {
- local -n result="$1"
- local name; bos-namespaces/encode-into name "bos_${3}_${2}"
+function bos-namespaces/store-assoc-for-into() {
+ local -n result="$1"; shift
+ local name; bos-namespaces/encode-into name "bos" "$@"
declare -gA "$name"
result="$name"
}
@@ -57,7 +60,7 @@ function bos-namespaces/pop() {
# save all currently-visible functions in an associative array
function bos-namespaces/save-funcs() {
local namespace; bos-namespaces/current-namespace-into namespace
- local ns_store; bos-namespaces/store-dict-for-into ns_store saved_funcs "$namespace"
+ local ns_store; bos-namespaces/store-assoc-for-into ns_store saved_funcs "$namespace"
local -n saved_funcs="$ns_store"
local _ funcname
@@ -73,7 +76,7 @@ function bos-namespaces/save-funcs() {
function bos-namespaces/list-new-funcs-into() {
local -n result="$1"
local namespace; bos-namespaces/current-namespace-into namespace
- local ns_store; bos-namespaces/store-dict-for-into ns_store saved_funcs "$namespace"
+ local ns_store; bos-namespaces/store-assoc-for-into ns_store saved_funcs "$namespace"
local -n saved_funcs="$ns_store"
local _ funcname new_function
@@ -96,7 +99,7 @@ function bos-namespaces/list-new-funcs-into() {
# saved function of the same name, if it exists
function bos-namespaces/qualify-funcs() {
local namespace; bos-namespaces/current-namespace-into namespace
- local ns_store; bos-namespaces/store-dict-for-into ns_store saved_funcs "$namespace"
+ local ns_store; bos-namespaces/store-assoc-for-into ns_store saved_funcs "$namespace"
local -n saved_funcs="$ns_store"
local _ funcname new_function