Lucio Andrés Illanes Albornoz 2b85d0
#
8d7a8a
# Copyright (c) 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 LucĂ­a Andrea Illanes Albornoz <lucia@luciaillanes.de>
Lucio Andrés Illanes Albornoz e1d469
# set +o errexit -o noglob -o nounset is assumed.
Lucio Andrés Illanes Albornoz 2b85d0
#
Lucio Andrés Illanes Albornoz 2b85d0
550c18
#
550c18
# rtl_isnumber() - check if string is number
550c18
# @_s:		string to check
550c18
#
550c18
# Returns:	zero (0) if string is number, non-zero (>0) if string is not number
550c18
#
Lucio Andrés Illanes Albornoz c6d6e0
rtl_isnumber() {
e9fa07
	local	_ri_s="${1}"	\
e9fa07
		_ri_rc=0;
e9fa07
e9fa07
	while [ "${_ri_s:+1}" = 1 ]; do
e9fa07
	case "${_ri_s}" in
e9fa07
	[0-9]*)	_ri_s="${_ri_s#[0-9]}"; ;;
e9fa07
	*)	_ri_rc=1; break; ;;
Lucio Andrés Illanes Albornoz c6d6e0
	esac; done;
e9fa07
e9fa07
	return "${_ri_rc}";
Lucio Andrés Illanes Albornoz c6d6e0
};
Lucio Andrés Illanes Albornoz c6d6e0
550c18
#
550c18
# rtl_match() - match pattern against string
550c18
# @_s:		input string
550c18
# @_find:	pattern to match against string
550c18
#
550c18
# Returns:	zero (0) on success, non-zero (>0) on failure
550c18
#
Lucio Andrés Illanes Albornoz 0d1c4f
rtl_match() {
e9fa07
	local _rm_s="${1}" _rm_find="${2}";
e9fa07
e9fa07
	if [ "${_rm_s#${_rm_find}}" != "${_rm_s}" ]; then
Lucio Andrés Illanes Albornoz 0d1c4f
		return 0;
Lucio Andrés Illanes Albornoz 0d1c4f
	else
Lucio Andrés Illanes Albornoz 0d1c4f
		return 1;
Lucio Andrés Illanes Albornoz 0d1c4f
	fi;
Lucio Andrés Illanes Albornoz 0d1c4f
};
Lucio Andrés Illanes Albornoz 0d1c4f
550c18
#
550c18
# rtl_matchr() - match pattern against string from right-hand side
550c18
# @_s:		input string
550c18
# @_find:	pattern to match against string
550c18
#
550c18
# Returns:	zero (0) on success, non-zero (>0) on failure
550c18
#
Lucio Andrés Illanes Albornoz b6a9a1
rtl_matchr() {
e9fa07
	local _rmr_s="${1}" _rmr_find="${2}";
e9fa07
e9fa07
	if [ "${_rmr_s%${_rmr_find}}" != "${_rmr_s}" ]; then
Lucio Andrés Illanes Albornoz b6a9a1
		return 0;
Lucio Andrés Illanes Albornoz b6a9a1
	else
Lucio Andrés Illanes Albornoz b6a9a1
		return 1;
Lucio Andrés Illanes Albornoz b6a9a1
	fi;
Lucio Andrés Illanes Albornoz b6a9a1
};
Lucio Andrés Illanes Albornoz b6a9a1
550c18
#
550c18
# rtl_remove_postfix() - remove longest postfix from string w/ pattern
550c18
# @_pattern:	pattern to match against input string
550c18
# @_s:		input string
550c18
# @_rs_out:	out reference to output string
550c18
#
550c18
# Returns:	zero (0) on success, non-zero (>0) on failure
550c18
#
550c18
rtl_remove_postfix() {
550c18
	local _rh_pattern="${1}" _rh_s="${2}" _rh_rs_out="${3#\$}";
550c18
550c18
	while true; do
550c18
		if [ "${_rh_s%%${_rh_pattern}}" = "${_rh_s}" ]; then
550c18
			break;
550c18
		else
550c18
			_rh_s="${_rh_s%%${_rh_pattern}}";
550c18
		fi;
550c18
	done;
550c18
550c18
	eval ${_rh_rs_out}='${_rh_s}';
550c18
	return 0;
550c18
};
550c18
550c18
#
550c18
# rtl_setrstatus() - set status string
550c18
# @_rstatus:	out reference to status string
550c18
# @_status:	new status string
550c18
#
550c18
# Returns:	zero (0) on success, non-zero (>0) on failure
550c18
#
e9fa07
rtl_setrstatus() {
e9fa07
	local _rsrs_rstatus="${1#\$}" _rsrs_status="${2}";
e9fa07
	eval ${_rsrs_rstatus}=\"${_rsrs_status}\";
e9fa07
	return 0;
e9fa07
};
e9fa07
550c18
#
550c18
# rtl_subst() - substitute in string
550c18
# @_rs:		inout reference to string
550c18
# @_find:	pattern to match against input string
550c18
# @_replace:	replacement string
550c18
#
550c18
# Returns:	zero (0) on success, non-zero (>0) on failure
550c18
#
Lucio Andrés Illanes Albornoz 8a27f9
rtl_subst() {
e9fa07
	rtl_subst2 "${1}" "${1}" "${2}" "${3}";
e9fa07
};
e9fa07
550c18
#
550c18
# rtl_subst2() - substitute in string
550c18
# @_rs:		in reference to string
550c18
# @_rs_out:	out reference to new string
550c18
# @_find:	pattern to match against input string
550c18
# @_replace:	replacement string
550c18
#
550c18
# Returns:	zero (0) on success, non-zero (>0) on failure
550c18
#
e9fa07
rtl_subst2() {
e9fa07
	local	_rs2_rs="${1#\$}" _rs2_rs_out="${2#\$}" _rs2_find="${3}" _rs2_replace="${4}"	\
e9fa07
		_rs2_prefix="" _rs2_s="" _rs2_s_new="";
e9fa07
e9fa07
	eval _rs2_s="\${${_rs2_rs}}";
e9fa07
	while [ "${_rs2_s:+1}" = 1 ]; do
e9fa07
	case "${_rs2_s}" in
e9fa07
	*${_rs2_find}*)	_rs2_prefix="${_rs2_s%%${_rs2_find}*}"; _rs2_s="${_rs2_s#*${_rs2_find}}";
e9fa07
			_rs2_s_new="${_rs2_s_new:+${_rs2_s_new}}${_rs2_prefix}${_rs2_replace}"; ;;
e9fa07
	*)		_rs2_s_new="${_rs2_s_new:+${_rs2_s_new}}${_rs2_s}"; _rs2_s=""; ;;
Lucio Andrés Illanes Albornoz 8a27f9
	esac; done;
e9fa07
	eval ${_rs2_rs_out}='${_rs2_s_new}';
e9fa07
	return 0;
Lucio Andrés Illanes Albornoz 8a27f9
};
Lucio Andrés Illanes Albornoz 8a27f9
550c18
#
550c18
# rtl_tolower() - convert string to lower case
550c18
# @_rs:		in reference to string
550c18
#
550c18
# Returns:	zero (0) on success, non-zero (>0) on failure
550c18
#
Lucio Andrés Illanes Albornoz c6d6e0
rtl_tolower() {
e9fa07
	rtl_tolower2 "${1}" "${1}";
e9fa07
};
e9fa07
550c18
#
550c18
# rtl_tolower2() - convert string to lower case
550c18
# @_rs:		in reference to string
550c18
# @_rs_out:	out reference to new string
550c18
#
550c18
# Returns:	zero (0) on success, non-zero (>0) on failure
550c18
#
e9fa07
rtl_tolower2() {
e9fa07
	local	_rtl2_rs="${1#\$}" _rtl2_rs_out="${2#\$}"	\
e9fa07
		_rtl2_s="" _rtl2_s_new="";
e9fa07
e9fa07
	eval _rtl2_s="\${${_rtl2_rs}}";
e9fa07
e9fa07
	while [ "${_rtl2_s:+1}" = 1 ]; do
e9fa07
	case "${_rtl2_s}" in
e9fa07
	A*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}a"; _rtl2_s="${_rtl2_s#A}"; ;;
e9fa07
	B*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}b"; _rtl2_s="${_rtl2_s#B}"; ;;
e9fa07
	C*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}c"; _rtl2_s="${_rtl2_s#C}"; ;;
e9fa07
	D*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}d"; _rtl2_s="${_rtl2_s#D}"; ;;
e9fa07
	E*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}e"; _rtl2_s="${_rtl2_s#E}"; ;;
e9fa07
	F*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}f"; _rtl2_s="${_rtl2_s#F}"; ;;
e9fa07
	G*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}g"; _rtl2_s="${_rtl2_s#G}"; ;;
e9fa07
	H*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}h"; _rtl2_s="${_rtl2_s#H}"; ;;
e9fa07
	I*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}i"; _rtl2_s="${_rtl2_s#I}"; ;;
e9fa07
	J*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}j"; _rtl2_s="${_rtl2_s#J}"; ;;
e9fa07
	K*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}k"; _rtl2_s="${_rtl2_s#K}"; ;;
e9fa07
	L*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}l"; _rtl2_s="${_rtl2_s#L}"; ;;
e9fa07
	M*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}m"; _rtl2_s="${_rtl2_s#M}"; ;;
e9fa07
	N*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}n"; _rtl2_s="${_rtl2_s#N}"; ;;
e9fa07
	O*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}o"; _rtl2_s="${_rtl2_s#O}"; ;;
e9fa07
	P*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}p"; _rtl2_s="${_rtl2_s#P}"; ;;
e9fa07
	Q*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}q"; _rtl2_s="${_rtl2_s#Q}"; ;;
e9fa07
	R*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}r"; _rtl2_s="${_rtl2_s#R}"; ;;
e9fa07
	S*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}s"; _rtl2_s="${_rtl2_s#S}"; ;;
e9fa07
	T*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}t"; _rtl2_s="${_rtl2_s#T}"; ;;
e9fa07
	U*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}u"; _rtl2_s="${_rtl2_s#U}"; ;;
e9fa07
	V*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}v"; _rtl2_s="${_rtl2_s#V}"; ;;
e9fa07
	W*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}w"; _rtl2_s="${_rtl2_s#W}"; ;;
e9fa07
	X*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}x"; _rtl2_s="${_rtl2_s#X}"; ;;
e9fa07
	Y*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}y"; _rtl2_s="${_rtl2_s#Y}"; ;;
e9fa07
	Z*)     _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}z"; _rtl2_s="${_rtl2_s#Z}"; ;;
Lucio Andrés Illanes Albornoz a7ecdc
	[!ABCDEFGHIJKLMNOPQRSTUVWXYZ]*)
e9fa07
		_rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}${_rtl2_s%%[ABCDEFGHIJKLMNOPQRSTUVWXYZ]*}";
e9fa07
		while [ "${_rtl2_s#[!ABCDEFGHIJKLMNOPQRSTUVWXYZ]}" != "${_rtl2_s}" ]; do
e9fa07
			_rtl2_s="${_rtl2_s#[!ABCDEFGHIJKLMNOPQRSTUVWXYZ]}";
Lucio Andrés Illanes Albornoz 2b85d0
		done; ;;
Lucio Andrés Illanes Albornoz 2b85d0
	esac; done;
e9fa07
	eval ${_rtl2_rs_out}='${_rtl2_s_new}';
e9fa07
e9fa07
	return 0;
Lucio Andrés Illanes Albornoz 2b85d0
};
Lucio Andrés Illanes Albornoz 2b85d0
550c18
#
550c18
# rtl_toupper() - convert string to upper case
550c18
# @_rs:		in reference to string
550c18
# @_rs_out:	out reference to new string
550c18
#
550c18
# Returns:	zero (0) on success, non-zero (>0) on failure
550c18
#
Lucio Andrés Illanes Albornoz c6d6e0
rtl_toupper() {
e9fa07
	rtl_toupper2 "${1}" "${1}";
e9fa07
};
e9fa07
550c18
#
550c18
# rtl_toupper2() - convert string to upper case
550c18
# @_rs:		in reference to string
550c18
# @_rs_out:	out reference to new string
550c18
#
550c18
# Returns:	zero (0) on success, non-zero (>0) on failure
550c18
#
e9fa07
rtl_toupper2() {
550c18
	local	_rtu2_rs="${1#\$}" _rtu2_rs_out="${2#\$}"	\
550c18
		_rtu2_s="" _rtu2_s_new="";
e9fa07
e9fa07
	eval _rtu2_s="\${${_rtu2_rs}}";
e9fa07
e9fa07
	while [ "${_rtu2_s:+1}" = 1 ]; do
e9fa07
	case "${_rtu2_s}" in
e9fa07
	a*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}A"; _rtu2_s="${_rtu2_s#a}"; ;;
e9fa07
	b*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}B"; _rtu2_s="${_rtu2_s#b}"; ;;
e9fa07
	c*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}C"; _rtu2_s="${_rtu2_s#c}"; ;;
e9fa07
	d*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}D"; _rtu2_s="${_rtu2_s#d}"; ;;
e9fa07
	e*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}E"; _rtu2_s="${_rtu2_s#e}"; ;;
e9fa07
	f*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}F"; _rtu2_s="${_rtu2_s#f}"; ;;
e9fa07
	g*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}G"; _rtu2_s="${_rtu2_s#g}"; ;;
e9fa07
	h*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}H"; _rtu2_s="${_rtu2_s#h}"; ;;
e9fa07
	i*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}I"; _rtu2_s="${_rtu2_s#i}"; ;;
e9fa07
	j*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}J"; _rtu2_s="${_rtu2_s#j}"; ;;
e9fa07
	k*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}K"; _rtu2_s="${_rtu2_s#k}"; ;;
e9fa07
	l*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}L"; _rtu2_s="${_rtu2_s#l}"; ;;
e9fa07
	m*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}M"; _rtu2_s="${_rtu2_s#m}"; ;;
e9fa07
	n*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}N"; _rtu2_s="${_rtu2_s#n}"; ;;
e9fa07
	o*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}O"; _rtu2_s="${_rtu2_s#o}"; ;;
e9fa07
	p*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}P"; _rtu2_s="${_rtu2_s#p}"; ;;
e9fa07
	q*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}Q"; _rtu2_s="${_rtu2_s#q}"; ;;
e9fa07
	r*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}R"; _rtu2_s="${_rtu2_s#r}"; ;;
e9fa07
	s*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}S"; _rtu2_s="${_rtu2_s#s}"; ;;
e9fa07
	t*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}T"; _rtu2_s="${_rtu2_s#t}"; ;;
e9fa07
	u*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}U"; _rtu2_s="${_rtu2_s#u}"; ;;
e9fa07
	v*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}V"; _rtu2_s="${_rtu2_s#v}"; ;;
e9fa07
	w*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}W"; _rtu2_s="${_rtu2_s#w}"; ;;
e9fa07
	x*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}X"; _rtu2_s="${_rtu2_s#x}"; ;;
e9fa07
	y*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}Y"; _rtu2_s="${_rtu2_s#y}"; ;;
e9fa07
	z*)     _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}Z"; _rtu2_s="${_rtu2_s#z}"; ;;
Lucio Andrés Illanes Albornoz a7ecdc
	[!abcdefghijklmnopqrstuvwxyz]*)
e9fa07
		_rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}${_rtu2_s%%[abcdefghijklmnopqrstuvwxyz]*}";
e9fa07
		while [ "${_rtu2_s#[!abcdefghijklmnopqrstuvwxyz]}" != "${_rtu2_s}" ]; do
e9fa07
			_rtu2_s="${_rtu2_s#[!abcdefghijklmnopqrstuvwxyz]}";
Lucio Andrés Illanes Albornoz 2b85d0
		done; ;;
Lucio Andrés Illanes Albornoz 2b85d0
	esac; done;
e9fa07
	eval ${_rtu2_rs_out}='${_rtu2_s_new}';
e9fa07
e9fa07
	return 0;
Lucio Andrés Illanes Albornoz 2b85d0
};
Lucio Andrés Illanes Albornoz 2b85d0
64844b
# vim:filetype=sh textwidth=0