mirror of
https://github.com/Gator96100/ProxSpace.git
synced 2025-07-16 02:03:02 -07:00
137 lines
4 KiB
Bash
137 lines
4 KiB
Bash
# Pactoys Util Library
|
||
# Copyright (C) 2016 Renato Silva
|
||
# Licensed under BSD
|
||
|
||
declare -Ag pactoys
|
||
test -n "${pactoys[module.util]}" && return
|
||
pactoys[module.util]=1
|
||
|
||
source "${PACTOYS_LIBRARY:-/usr/share/pactoys/library}/default.sh" || return
|
||
|
||
pactoys_separate() {
|
||
local items="${1}"
|
||
local columns=("${@:2}")
|
||
local column
|
||
for column in "${columns[@]}"; do
|
||
local -n nameref_column="${column}"
|
||
if [[ "${items}" = *::* ]]; then
|
||
nameref_column="${items%%::*}"
|
||
items="${items#*::}"
|
||
elif test -z "${items}"
|
||
then nameref_column=
|
||
else nameref_column="${items}" items=
|
||
fi
|
||
done
|
||
}
|
||
|
||
pactoys_lines_to_list() {
|
||
local -n nameref_list="${1}"
|
||
local _pactoys_lines="${2}"
|
||
local _pactoys_strip="${3}"
|
||
nameref_list=()
|
||
while IFS= read -r line; do
|
||
test -z "${line}" && continue
|
||
nameref_list+=("${line/${_pactoys_strip}/}")
|
||
done <<< "${_pactoys_lines}"
|
||
}
|
||
|
||
pactoys_path_to_list() {
|
||
local -n nameref_list="${1}"
|
||
local _pactoys_path="${2}"
|
||
local _pactoys_current
|
||
nameref_list=()
|
||
while [[ "${_pactoys_path}" = *:* ]]; do
|
||
_pactoys_current="${_pactoys_path%%:*}"
|
||
_pactoys_path="${_pactoys_path#*:}"
|
||
test -n "${_pactoys_current}" || continue
|
||
nameref_list+=("${_pactoys_current}")
|
||
done
|
||
test -z "${_pactoys_path}" && return 0
|
||
nameref_list+=("${_pactoys_path}")
|
||
}
|
||
|
||
pactoys_init_hash() {
|
||
local -n nameref_hash="${1}"
|
||
local value="${2}"
|
||
local keys=("${@:3}")
|
||
local key
|
||
for key in "${keys[@]}"; do
|
||
nameref_hash[${key}]="${value}"
|
||
done
|
||
}
|
||
|
||
pactoys_merge_hash() {
|
||
local -n nameref_target="${1}"
|
||
local -n nameref_origin="${2}"
|
||
local key
|
||
for key in "${!nameref_origin[@]}"; do
|
||
nameref_target[${key}]="${nameref_origin[${key}]}"
|
||
done
|
||
}
|
||
|
||
pactoys_print_hash() {
|
||
local -n nameref_hash="${1}"
|
||
local format="${2:-list}"
|
||
local key
|
||
case "${format}" in
|
||
table) format='%-30s %s\n' ;;
|
||
list) format='%s: %s\n' ;;
|
||
esac
|
||
for key in "${!nameref_hash[@]}"; do
|
||
printf "${format}" "${key}" "${nameref_hash[${key}]}"
|
||
done | sort
|
||
}
|
||
|
||
pactoys_load_object() {
|
||
local -n _pactoys_nameref_source="${1}"
|
||
local -n _pactoys_nameref_object="${2}"
|
||
local _pactoys_id="${3}"
|
||
local -a _pactoys_properties=("${@:4}")
|
||
local "${_pactoys_properties[@]}"
|
||
local _pactoys_property
|
||
_pactoys_nameref_object[id]="${_pactoys_id}"
|
||
pactoys_separate "${_pactoys_nameref_source[${_pactoys_id}]}" "${_pactoys_properties[@]}"
|
||
for _pactoys_property in "${_pactoys_properties[@]}"; do
|
||
_pactoys_nameref_object[${_pactoys_property}]="${!_pactoys_property}"
|
||
done
|
||
}
|
||
|
||
pactoys_filter() {
|
||
local filter="${1}"
|
||
local data="${2}"
|
||
local pattern="${filter#not:}"
|
||
[[ "${filter}" = not:* && "${data}" =~ ${pattern} ]] && return 1
|
||
[[ "${filter}" = not:* || "${data}" =~ ${pattern:-.*} ]]
|
||
}
|
||
|
||
pactoys_find_pattern() {
|
||
local searched="${1}"
|
||
local patterns=("${@:2}")
|
||
local pattern
|
||
for pattern in "${patterns[@]}"; do
|
||
[[ "${searched}" =~ ${pattern} ]] && return 0
|
||
done
|
||
return 1
|
||
}
|
||
|
||
pactoys_find_files() {
|
||
local -n nameref_files="${1}"
|
||
local filename="${2}"
|
||
local filter="${3}"
|
||
local directories=("${@:4}")
|
||
local directory
|
||
nameref_files=()
|
||
for directory in "${directories[@]:-.}"; do
|
||
if ! test -d "${directory}"; then
|
||
pactoys[error]="missing directory ‘${directory}’"
|
||
return 1
|
||
fi
|
||
done
|
||
if test -n "${filter}"
|
||
then local options=(--recursive --files-with-match --extended-regexp --ignore-case --include="${filename}")
|
||
nameref_files="$(pactoys_noiseless grep "${options[@]}" "${filter}" "${directories[@]}" | sort --ignore-case)"
|
||
else nameref_files="$(pactoys_noiseless find "${directories[@]}" -type f -name "${filename}" | sort --ignore-case)"
|
||
fi
|
||
pactoys_lines_to_list nameref_files "${nameref_files}" '#./'
|
||
return 0
|
||
}
|