| |
| |
| |
| |
| rtl_lassign() { |
| local _vnames="${1}" _sep="${2}" _vname="" _vval=""\ |
| IFS RTL_LFIRST_HEAD="" RTL_LFIRST_TAIL=""; |
| IFS="${_sep}"; shift 2; |
| for _vval in ${@}; do |
| if ! rtl_lfirst "${_vnames}" " "; then |
| return 1; |
| else |
| _vname="${RTL_LFIRST_HEAD}"; _vnames="${RTL_LFIRST_TAIL}"; |
| rtl_set_var_unsafe "${_vname}" "${_vval}"; |
| fi; |
| done; |
| }; |
| |
| rtl_lconcat() { |
| local _list="${1}" _litem_new="${2}" _sep="${3:- }" IFS="${3:-${IFS:- }}"; |
| if [ -n "${_list}" ]; then |
| printf "%s%s%s" "${_list}" "${_sep}" "${_litem_new}"; |
| else |
| printf "%s" "${_litem_new}"; |
| fi; |
| }; |
| |
| rtl_lfilter() { |
| local _list="${1}" _filter="${2}" _sep="${3:- }" IFS="${3:-${IFS:- }}"\ |
| _filterfl="" _litem="" _litem_filter="" _lnew=""; |
| if [ -z "${_filter}" ]; then |
| printf "%s" "${_list}"; return 0; |
| else for _litem in ${_list}; do |
| _filterfl=0; |
| for _litem_filter in ${_filter}; do |
| if [ "${_litem_filter}" = "${_litem}" ]; then |
| _filterfl=1; break; |
| fi; |
| done; |
| if [ "${_filterfl:-0}" -eq 0 ]; then |
| _lnew="${_lnew:+${_lnew}${_sep}}${_litem}"; |
| fi; |
| done; fi; |
| printf "%s" "${_lnew}"; |
| }; |
| |
| rtl_lfirst() { |
| local _list="${1}" _sep="${2}" IFS; IFS="${_sep}"; |
| set -- ${_list}; RTL_LFIRST_HEAD="${1}"; |
| if [ "${#}" -ge 0 ]; then |
| shift; RTL_LFIRST_TAIL="${*}"; |
| else |
| RTL_LFIRST_TAIL=""; |
| fi; |
| }; |
| |
| rtl_llength() { |
| local _list="${1}" _sep="${2:- }" IFS="${2:-${IFS:- }}" _litem="" _llength=0; |
| for _litem in ${_list}; do |
| : $((_llength+=1)); |
| done; |
| printf "%s" "${_llength}"; |
| }; |
| |
| rtl_llift() { |
| local _list="${1}" _sep="${2}" _sep_new="${3}" IFS; IFS="${_sep}"; |
| set -- ${_list}; IFS="${_sep_new}"; |
| printf "%s" "${*}"; |
| }; |
| |
| rtl_lmatch() { |
| local _list="${1}" _item="${2}" _sep="${3:- }"; |
| [ -n "$(rtl_lsearch "${_list}" "${_item}" "${_sep}")" ]; |
| }; |
| |
| rtl_lmax() { |
| local _len=0 _len_max=0; |
| while [ "${#}" -gt 0 ]; do |
| _len="${#1}"; |
| if [ "${_len}" -gt "${_len_max}" ]; then |
| _len_max="${_len}"; |
| fi; shift; |
| done; printf "%s" "${_len_max}"; |
| }; |
| |
| rtl_lsearch() { |
| local _list="${1}" _filter="${2}" _sep="${3:- }" IFS="${3:-${IFS:- }}"\ |
| _litem="" _litem_filter="" _lnew=""; |
| if [ -z "${_filter}" ]; then |
| printf "%s" "${_list}"; return 0; |
| else for _litem in ${_list}; do |
| for _litem_filter in ${_filter}; do |
| if [ "${_litem_filter}" = "${_litem}" ]; then |
| _lnew="${_lnew:+${_lnew}${_sep}}${_litem}"; |
| break; |
| fi; |
| done; |
| done; fi; |
| printf "%s" "${_lnew}"; |
| }; |
| |
| rtl_lsort() { |
| local _list="${1}" _sep="${2:- }"; |
| printf "%s" "${_list}" | tr "${_sep}" "\n" | sort | paste -s -d "${_sep}"; |
| }; |
| |
| rtl_lunfold_depends() { |
| local _vname_template="${1}" _depends="" _name="" _names=""; shift; |
| for _name in "${@}"; do |
| if _depends="$(rtl_get_var_unsafe -u "$(eval printf \"%s\" \""${_vname_template}"\")")"\ |
| && [ -n "${_depends}" ]; then |
| _depends="$(rtl_lunfold_depends "${_vname_template}" ${_depends})"; |
| _names="$(rtl_lconcat "${_names}" "${_depends}")"; |
| fi; |
| _names="$(rtl_lconcat "${_names}" "${_name}")"; |
| done; |
| printf "%s" "${_names}"; |
| }; |
| |
| # vim:filetype=sh |
| |