summaryrefslogtreecommitdiffhomepage
path: root/subr.rtl/rtl_string.subr
diff options
context:
space:
mode:
authorLucía Andrea Illanes Albornoz <lucia@luciaillanes.de>2023-02-17 19:29:28 +0100
committerLucía Andrea Illanes Albornoz <lucia@luciaillanes.de>2023-02-17 19:29:28 +0100
commite9fa0774ed2e7e030a68f5b0ae51fe6dd69fe492 (patch)
tree37e46c2578bd8f4f435073db01abc514976da8a8 /subr.rtl/rtl_string.subr
parent56495632fc8bf612766a9c431e37ff27a903e8c6 (diff)
downloadmidipix_build-e9fa0774ed2e7e030a68f5b0ae51fe6dd69fe492.tar.bz2
midipix_build-e9fa0774ed2e7e030a68f5b0ae51fe6dd69fe492.tar.xz
Make everything a bit faster.
0) Issues several prayers and sacrifices to Enki under threat of a terrible deluge sent down by Ellil 1) Convert fork-write/read exprs to be non-forking 2) Pass mostly everything by reference 3) Don't bother cleaning the variable namespace because Bourne shell is an abomination 4) Removes broken ./pkgtool.sh -s, --restart-at, --update-diff & ./build.sh --dump-{in,on-abort} 5) Cleanup
Diffstat (limited to 'subr.rtl/rtl_string.subr')
-rw-r--r--subr.rtl/rtl_string.subr204
1 files changed, 121 insertions, 83 deletions
diff --git a/subr.rtl/rtl_string.subr b/subr.rtl/rtl_string.subr
index e3e98601..75c5169a 100644
--- a/subr.rtl/rtl_string.subr
+++ b/subr.rtl/rtl_string.subr
@@ -3,18 +3,22 @@
#
rtl_isnumber() {
- local _s="${1}" _rc=0;
- while [ -n "${_s}" ]; do
- case "${_s}" in
- [0-9]*) _s="${_s#[0-9]}"; ;;
- *) _rc=1; break; ;;
+ local _ri_s="${1}" \
+ _ri_rc=0;
+
+ while [ "${_ri_s:+1}" = 1 ]; do
+ case "${_ri_s}" in
+ [0-9]*) _ri_s="${_ri_s#[0-9]}"; ;;
+ *) _ri_rc=1; break; ;;
esac; done;
- return "${_rc}";
+
+ return "${_ri_rc}";
};
rtl_match() {
- local _s="${1}" _find="${2}";
- if [ "${_s#${_find}}" != "${_s}" ]; then
+ local _rm_s="${1}" _rm_find="${2}";
+
+ if [ "${_rm_s#${_rm_find}}" != "${_rm_s}" ]; then
return 0;
else
return 1;
@@ -22,101 +26,135 @@ rtl_match() {
};
rtl_matchr() {
- local _s="${1}" _find="${2}";
- if [ "${_s%${_find}}" != "${_s}" ]; then
+ local _rmr_s="${1}" _rmr_find="${2}";
+
+ if [ "${_rmr_s%${_rmr_find}}" != "${_rmr_s}" ]; then
return 0;
else
return 1;
fi;
};
+rtl_setrstatus() {
+ local _rsrs_rstatus="${1#\$}" _rsrs_status="${2}";
+ eval ${_rsrs_rstatus}=\"${_rsrs_status}\";
+ return 0;
+};
+
rtl_subst() {
- local _s="${1}" _find="${2}" _replace="${3}" _prefix="" _s_new="";
- while [ -n "${_s}" ]; do
- case "${_s}" in
- *${_find}*) _prefix="${_s%%${_find}*}"; _s="${_s#*${_find}}";
- _s_new="${_s_new:+${_s_new}}${_prefix}${_replace}"; ;;
- *) _s_new="${_s_new:+${_s_new}}${_s}"; _s=""; ;;
+ rtl_subst2 "${1}" "${1}" "${2}" "${3}";
+};
+
+rtl_subst2() {
+ local _rs2_rs="${1#\$}" _rs2_rs_out="${2#\$}" _rs2_find="${3}" _rs2_replace="${4}" \
+ _rs2_prefix="" _rs2_s="" _rs2_s_new="";
+
+ eval _rs2_s="\${${_rs2_rs}}";
+ while [ "${_rs2_s:+1}" = 1 ]; do
+ case "${_rs2_s}" in
+ *${_rs2_find}*) _rs2_prefix="${_rs2_s%%${_rs2_find}*}"; _rs2_s="${_rs2_s#*${_rs2_find}}";
+ _rs2_s_new="${_rs2_s_new:+${_rs2_s_new}}${_rs2_prefix}${_rs2_replace}"; ;;
+ *) _rs2_s_new="${_rs2_s_new:+${_rs2_s_new}}${_rs2_s}"; _rs2_s=""; ;;
esac; done;
- printf "%s" "${_s_new}";
+ eval ${_rs2_rs_out}='${_rs2_s_new}';
+ return 0;
};
rtl_tolower() {
- local _s="${1}" _s_new="";
- while [ -n "${_s}" ]; do
- case "${_s}" in
- A*) _s_new="${_s_new:+${_s_new}}a"; _s="${_s#A}"; ;;
- B*) _s_new="${_s_new:+${_s_new}}b"; _s="${_s#B}"; ;;
- C*) _s_new="${_s_new:+${_s_new}}c"; _s="${_s#C}"; ;;
- D*) _s_new="${_s_new:+${_s_new}}d"; _s="${_s#D}"; ;;
- E*) _s_new="${_s_new:+${_s_new}}e"; _s="${_s#E}"; ;;
- F*) _s_new="${_s_new:+${_s_new}}f"; _s="${_s#F}"; ;;
- G*) _s_new="${_s_new:+${_s_new}}g"; _s="${_s#G}"; ;;
- H*) _s_new="${_s_new:+${_s_new}}h"; _s="${_s#H}"; ;;
- I*) _s_new="${_s_new:+${_s_new}}i"; _s="${_s#I}"; ;;
- J*) _s_new="${_s_new:+${_s_new}}j"; _s="${_s#J}"; ;;
- K*) _s_new="${_s_new:+${_s_new}}k"; _s="${_s#K}"; ;;
- L*) _s_new="${_s_new:+${_s_new}}l"; _s="${_s#L}"; ;;
- M*) _s_new="${_s_new:+${_s_new}}m"; _s="${_s#M}"; ;;
- N*) _s_new="${_s_new:+${_s_new}}n"; _s="${_s#N}"; ;;
- O*) _s_new="${_s_new:+${_s_new}}o"; _s="${_s#O}"; ;;
- P*) _s_new="${_s_new:+${_s_new}}p"; _s="${_s#P}"; ;;
- Q*) _s_new="${_s_new:+${_s_new}}q"; _s="${_s#Q}"; ;;
- R*) _s_new="${_s_new:+${_s_new}}r"; _s="${_s#R}"; ;;
- S*) _s_new="${_s_new:+${_s_new}}s"; _s="${_s#S}"; ;;
- T*) _s_new="${_s_new:+${_s_new}}t"; _s="${_s#T}"; ;;
- U*) _s_new="${_s_new:+${_s_new}}u"; _s="${_s#U}"; ;;
- V*) _s_new="${_s_new:+${_s_new}}v"; _s="${_s#V}"; ;;
- W*) _s_new="${_s_new:+${_s_new}}w"; _s="${_s#W}"; ;;
- X*) _s_new="${_s_new:+${_s_new}}x"; _s="${_s#X}"; ;;
- Y*) _s_new="${_s_new:+${_s_new}}y"; _s="${_s#Y}"; ;;
- Z*) _s_new="${_s_new:+${_s_new}}z"; _s="${_s#Z}"; ;;
+ rtl_tolower2 "${1}" "${1}";
+};
+
+rtl_tolower2() {
+ local _rtl2_rs="${1#\$}" _rtl2_rs_out="${2#\$}" \
+ _rtl2_s="" _rtl2_s_new="";
+
+ eval _rtl2_s="\${${_rtl2_rs}}";
+
+ while [ "${_rtl2_s:+1}" = 1 ]; do
+ case "${_rtl2_s}" in
+ A*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}a"; _rtl2_s="${_rtl2_s#A}"; ;;
+ B*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}b"; _rtl2_s="${_rtl2_s#B}"; ;;
+ C*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}c"; _rtl2_s="${_rtl2_s#C}"; ;;
+ D*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}d"; _rtl2_s="${_rtl2_s#D}"; ;;
+ E*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}e"; _rtl2_s="${_rtl2_s#E}"; ;;
+ F*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}f"; _rtl2_s="${_rtl2_s#F}"; ;;
+ G*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}g"; _rtl2_s="${_rtl2_s#G}"; ;;
+ H*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}h"; _rtl2_s="${_rtl2_s#H}"; ;;
+ I*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}i"; _rtl2_s="${_rtl2_s#I}"; ;;
+ J*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}j"; _rtl2_s="${_rtl2_s#J}"; ;;
+ K*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}k"; _rtl2_s="${_rtl2_s#K}"; ;;
+ L*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}l"; _rtl2_s="${_rtl2_s#L}"; ;;
+ M*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}m"; _rtl2_s="${_rtl2_s#M}"; ;;
+ N*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}n"; _rtl2_s="${_rtl2_s#N}"; ;;
+ O*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}o"; _rtl2_s="${_rtl2_s#O}"; ;;
+ P*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}p"; _rtl2_s="${_rtl2_s#P}"; ;;
+ Q*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}q"; _rtl2_s="${_rtl2_s#Q}"; ;;
+ R*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}r"; _rtl2_s="${_rtl2_s#R}"; ;;
+ S*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}s"; _rtl2_s="${_rtl2_s#S}"; ;;
+ T*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}t"; _rtl2_s="${_rtl2_s#T}"; ;;
+ U*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}u"; _rtl2_s="${_rtl2_s#U}"; ;;
+ V*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}v"; _rtl2_s="${_rtl2_s#V}"; ;;
+ W*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}w"; _rtl2_s="${_rtl2_s#W}"; ;;
+ X*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}x"; _rtl2_s="${_rtl2_s#X}"; ;;
+ Y*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}y"; _rtl2_s="${_rtl2_s#Y}"; ;;
+ Z*) _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}z"; _rtl2_s="${_rtl2_s#Z}"; ;;
[!ABCDEFGHIJKLMNOPQRSTUVWXYZ]*)
- _s_new="${_s_new:+${_s_new}}${_s%%[ABCDEFGHIJKLMNOPQRSTUVWXYZ]*}";
- while [ "${_s#[!ABCDEFGHIJKLMNOPQRSTUVWXYZ]}" != "${_s}" ]; do
- _s="${_s#[!ABCDEFGHIJKLMNOPQRSTUVWXYZ]}";
+ _rtl2_s_new="${_rtl2_s_new:+${_rtl2_s_new}}${_rtl2_s%%[ABCDEFGHIJKLMNOPQRSTUVWXYZ]*}";
+ while [ "${_rtl2_s#[!ABCDEFGHIJKLMNOPQRSTUVWXYZ]}" != "${_rtl2_s}" ]; do
+ _rtl2_s="${_rtl2_s#[!ABCDEFGHIJKLMNOPQRSTUVWXYZ]}";
done; ;;
esac; done;
- printf "%s" "${_s_new}";
+ eval ${_rtl2_rs_out}='${_rtl2_s_new}';
+
+ return 0;
};
rtl_toupper() {
- local _s="${1}" _s_new="";
- while [ -n "${_s}" ]; do
- case "${_s}" in
- a*) _s_new="${_s_new:+${_s_new}}A"; _s="${_s#a}"; ;;
- b*) _s_new="${_s_new:+${_s_new}}B"; _s="${_s#b}"; ;;
- c*) _s_new="${_s_new:+${_s_new}}C"; _s="${_s#c}"; ;;
- d*) _s_new="${_s_new:+${_s_new}}D"; _s="${_s#d}"; ;;
- e*) _s_new="${_s_new:+${_s_new}}E"; _s="${_s#e}"; ;;
- f*) _s_new="${_s_new:+${_s_new}}F"; _s="${_s#f}"; ;;
- g*) _s_new="${_s_new:+${_s_new}}G"; _s="${_s#g}"; ;;
- h*) _s_new="${_s_new:+${_s_new}}H"; _s="${_s#h}"; ;;
- i*) _s_new="${_s_new:+${_s_new}}I"; _s="${_s#i}"; ;;
- j*) _s_new="${_s_new:+${_s_new}}J"; _s="${_s#j}"; ;;
- k*) _s_new="${_s_new:+${_s_new}}K"; _s="${_s#k}"; ;;
- l*) _s_new="${_s_new:+${_s_new}}L"; _s="${_s#l}"; ;;
- m*) _s_new="${_s_new:+${_s_new}}M"; _s="${_s#m}"; ;;
- n*) _s_new="${_s_new:+${_s_new}}N"; _s="${_s#n}"; ;;
- o*) _s_new="${_s_new:+${_s_new}}O"; _s="${_s#o}"; ;;
- p*) _s_new="${_s_new:+${_s_new}}P"; _s="${_s#p}"; ;;
- q*) _s_new="${_s_new:+${_s_new}}Q"; _s="${_s#q}"; ;;
- r*) _s_new="${_s_new:+${_s_new}}R"; _s="${_s#r}"; ;;
- s*) _s_new="${_s_new:+${_s_new}}S"; _s="${_s#s}"; ;;
- t*) _s_new="${_s_new:+${_s_new}}T"; _s="${_s#t}"; ;;
- u*) _s_new="${_s_new:+${_s_new}}U"; _s="${_s#u}"; ;;
- v*) _s_new="${_s_new:+${_s_new}}V"; _s="${_s#v}"; ;;
- w*) _s_new="${_s_new:+${_s_new}}W"; _s="${_s#w}"; ;;
- x*) _s_new="${_s_new:+${_s_new}}X"; _s="${_s#x}"; ;;
- y*) _s_new="${_s_new:+${_s_new}}Y"; _s="${_s#y}"; ;;
- z*) _s_new="${_s_new:+${_s_new}}Z"; _s="${_s#z}"; ;;
+ rtl_toupper2 "${1}" "${1}";
+};
+
+rtl_toupper2() {
+ local _rtu2_rs="${1#\$}" _rtu2_rs_out="${2#\$}" _rtu2_s="" _rtu2_s_new="";
+
+ eval _rtu2_s="\${${_rtu2_rs}}";
+
+ while [ "${_rtu2_s:+1}" = 1 ]; do
+ case "${_rtu2_s}" in
+ a*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}A"; _rtu2_s="${_rtu2_s#a}"; ;;
+ b*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}B"; _rtu2_s="${_rtu2_s#b}"; ;;
+ c*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}C"; _rtu2_s="${_rtu2_s#c}"; ;;
+ d*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}D"; _rtu2_s="${_rtu2_s#d}"; ;;
+ e*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}E"; _rtu2_s="${_rtu2_s#e}"; ;;
+ f*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}F"; _rtu2_s="${_rtu2_s#f}"; ;;
+ g*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}G"; _rtu2_s="${_rtu2_s#g}"; ;;
+ h*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}H"; _rtu2_s="${_rtu2_s#h}"; ;;
+ i*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}I"; _rtu2_s="${_rtu2_s#i}"; ;;
+ j*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}J"; _rtu2_s="${_rtu2_s#j}"; ;;
+ k*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}K"; _rtu2_s="${_rtu2_s#k}"; ;;
+ l*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}L"; _rtu2_s="${_rtu2_s#l}"; ;;
+ m*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}M"; _rtu2_s="${_rtu2_s#m}"; ;;
+ n*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}N"; _rtu2_s="${_rtu2_s#n}"; ;;
+ o*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}O"; _rtu2_s="${_rtu2_s#o}"; ;;
+ p*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}P"; _rtu2_s="${_rtu2_s#p}"; ;;
+ q*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}Q"; _rtu2_s="${_rtu2_s#q}"; ;;
+ r*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}R"; _rtu2_s="${_rtu2_s#r}"; ;;
+ s*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}S"; _rtu2_s="${_rtu2_s#s}"; ;;
+ t*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}T"; _rtu2_s="${_rtu2_s#t}"; ;;
+ u*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}U"; _rtu2_s="${_rtu2_s#u}"; ;;
+ v*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}V"; _rtu2_s="${_rtu2_s#v}"; ;;
+ w*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}W"; _rtu2_s="${_rtu2_s#w}"; ;;
+ x*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}X"; _rtu2_s="${_rtu2_s#x}"; ;;
+ y*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}Y"; _rtu2_s="${_rtu2_s#y}"; ;;
+ z*) _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}Z"; _rtu2_s="${_rtu2_s#z}"; ;;
[!abcdefghijklmnopqrstuvwxyz]*)
- _s_new="${_s_new:+${_s_new}}${_s%%[abcdefghijklmnopqrstuvwxyz]*}";
- while [ "${_s#[!abcdefghijklmnopqrstuvwxyz]}" != "${_s}" ]; do
- _s="${_s#[!abcdefghijklmnopqrstuvwxyz]}";
+ _rtu2_s_new="${_rtu2_s_new:+${_rtu2_s_new}}${_rtu2_s%%[abcdefghijklmnopqrstuvwxyz]*}";
+ while [ "${_rtu2_s#[!abcdefghijklmnopqrstuvwxyz]}" != "${_rtu2_s}" ]; do
+ _rtu2_s="${_rtu2_s#[!abcdefghijklmnopqrstuvwxyz]}";
done; ;;
esac; done;
- printf "%s" "${_s_new}";
+ eval ${_rtu2_rs_out}='${_rtu2_s_new}';
+
+ return 0;
};
# vim:filetype=sh