# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 ##@cooked nocomments module: base.str base_ "Fonctions de base: gestion des valeurs chaines" function: base_strmid "Afficher la plage \$1 de la valeur \$2..* La plage peut être d'une des formes 'start', '[start]:length'. Si start est négatif, le compte est effectué à partir de la fin de la chaine. Si length est négatif, il est rajouté à la longueur de la chaine à partir de start" function base_strmid() { local range="$1"; shift local str="$*" if [[ "$range" == *:-* ]]; then local max=${#str} [ $max -eq 0 ] && return local start="${range%%:*}" [ -n "$start" ] || start=0 while [ "$start" -lt 0 ]; do start=$(($max$start)) done max=$(($max-$start)) local length="${range#*:}" while [ "$length" -lt 0 ]; do length=$(($max$length)) done range="$start:$length" fi eval 'echo "${str:'" $range"'}"' } function: base_strrepl "Remplacer dans la valeur \$3..* le motif \$1 par la chaine \$2 \$1 peut commencer par l'un des caractères /, #, % pour indiquer le type de recherche" function base_strrepl() { local pattern="$1"; shift local repl="$1"; shift local str="$*" local cmd='echo "${str/' if [ "${pattern#/}" != "$pattern" ]; then pattern="${pattern#/}" cmd="$cmd/" elif [ "${pattern#\#}" != "$pattern" ]; then pattern="${pattern#\#}" cmd="$cmd#" elif [ "${pattern#%}" != "$pattern" ]; then pattern="${pattern#%}" cmd="$cmd%" fi cmd="$cmd"'$pattern/$repl}"' eval "$cmd" } function: base_strlcomp "transformer dans le flux en entrée en UTF-8 certains caractères en leur équivalent transformable en latin1. si cette fonction est appelée avec des arguments, prendre \$* comme valeur du flux en entrée." function base_strlcomp() { if [ $# -gt 0 ]; then base_strlcomp <<<"$*" else LANG=fr_FR.UTF-8 sed $' s/[\xE2\x80\x90\xE2\x80\x91\xE2\x80\x92\xE2\x80\x93\xE2\x80\x94\xE2\x80\x95]/-/g s/[‘’]/\x27/g s/[«»“”]/"/g s/[\xC2\xA0\xE2\x80\x87\xE2\x80\xAF\xE2\x81\xA0]/ /g s/[œ]/oe/g s/[Œ]/OE/g s/[æ]/ae/g s/[Æ]/AE/g s/a\xCC\x80/à/g s/e\xCC\x81/é/g; s/e\xCC\x80/è/g; s/e\xCC\x82/ê/g; s/e\xCC\x88/ë/g s/i\xCC\x88/ï/g; s/i\xCC\x82/î/g s/o\xCC\x82/ô/g; s/o\xCC\x88/ö/g s/u\xCC\x88/ü/g; s/u\xCC\x82/û/g s/c\xCC\xA7/ç/g s/A\xCC\x80/À/g s/E\xCC\x81/É/g; s/E\xCC\x80/È/g; s/E\xCC\x82/Ê/g; s/E\xCC\x88/Ë/g s/I\xCC\x88/Ï/g; s/I\xCC\x82/Î/g s/O\xCC\x82/Ô/g; s/O\xCC\x88/Ö/g s/U\xCC\x88/Ü/g; s/U\xCC\x82/Û/g s/C\xCC\xA7/Ç/g ' fi } function: base_strnacc "supprimer les accents dans le flux en entrée en UTF-8 si cette fonction est appelée avec des arguments, prendre \$* comme valeur du flux en entrée." function base_strnacc() { if [ $# -gt 0 ]; then base_strnacc <<<"$*" else LANG=fr_FR.UTF-8 sed ' s/[à]/a/g s/[éèêë]/e/g s/[ïî]/i/g s/[ôö]/o/g s/[üû]/u/g s/[ç]/c/g s/[À]/A/g s/[ÉÈÊË]/E/g s/[ÏÎ]/I/g s/[ÔÖ]/O/g s/[ÜÛ]/U/g s/[Ç]/C/g ' fi } function: base_stripnl "Supprimer dans le flux en entrée les caractères de fin de ligne si cette fonction est appelée avec des arguments, prendre \$* comme valeur du flux en entrée." function base_stripnl() { if [ $# -gt 0 ]; then base_stripnl <<<"$*" else tr -d '\r\n' fi } function: base_nl2lf "transformer dans le flux en entrée les fins de ligne en LF si cette fonction est appelée avec des arguments, prendre \$* comme valeur du flux en entrée." function base_nl2lf() { if [ $# -gt 0 ]; then base_nl2lf <<<"$*" else lawk 'BEGIN {RS="\r|\r\n|\n"} {print}' fi } function: base_nl2crlf "transformer dans le flux en entrée les fins de ligne en CRLF si cette fonction est appelée avec des arguments, prendre \$* comme valeur du flux en entrée." function base_nl2crlf() { if [ $# -gt 0 ]; then base_nl2crlf <<<"$*" else lawk 'BEGIN {RS="\r|\r\n|\n"} {print $0 "\r"}' fi } function: base_nl2cr "transformer dans le flux en entrée les fins de ligne en CR si cette fonction est appelée avec des arguments, prendre \$* comme valeur du flux en entrée." function base_nl2cr() { if [ $# -gt 0 ]; then base_nl2cr <<<"$*" else lawk 'BEGIN {RS="\r|\r\n|\n"; ORS=""} {print $0 "\r"}' fi }