##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 ## Gestion de fichiers de propriétés java ##@cooked nocomments ##@require base uprovide javaproperties urequire base function read_property() { # Lire la propriété $2 dans le fichier $1, et placer la valeur dans la # variable $3. Si la propriété n'existe pas, prendre la valeur par défaut # $4. Si $3=="", elle est construite à partir de $2 en remplaçant les '.' # par '_' # Retourner 1 si une erreur s'est produite (par exemple si le fichier # n'existe pas ou n'est pas accessible en lecture) [ -f "$1" -a -r "$1" ] || return 1 local __rp_name __rp_value __rp_found # utiliser cawkrun pour que awk n'essaye pas de traiter les caractères en # unicode (latin1 wrt utf-8) __rp_value="$(<"$1" cawkrun name="$2" ' BEGIN { found = 1 re_name = name gsub(/\./, "\\.", re_name) re_name = "^[ \t]*" re_name "[ \t]*=" } $0 ~ re_name { sub(re_name, "") value = $0 sub(/^[ \t]*/, "", value) while (substr(value, length(value), 1) == "\\") { getline sub(/^[ \t]*/, "") value = substr(value, 1, length(value) - 1) $0 } print value found = 0 exit } END { exit found }')" && __rp_found=1 if [ -n "$3" ]; then __rp_name="$3" else __rp_name="${2//./_}" fi if [ -n "$__rp_found" ]; then set_var "$__rp_name" "$(tooenc "$__rp_value" "$LATIN1")" else set_var "$__rp_name" "$4" fi } function write_property() { # Ecrire la propriété $2 dans le fichier $1 avec la valeur $3. # Retourner 1 si une erreur s'est produite (par exemple si le fichier # n'existe pas ou n'est pas accessible en écriture) [ -f "$1" -a -w "$1" ] || return 1 local status tmpfile ac_set_tmpfile tmpfile # utiliser cawkrun pour que awk n'essaye pas de traiter les caractères en # unicode (utf-8 wrt latin1) <"$1" >"$tmpfile" cawkrun name="$2" value="$(tooenc "$3" "" "$LATIN1")" ' function write_value() { # XXX attention, le découpage n"est potentiellement pas fait # correctement si la valeur contient des espaces line = name "=" value prefix = "" max_len = 75 if (length(line) > max_len) { do { print prefix substr(line, 1, max_len) "\\" line = substr(line, max_len + 1) prefix = " " max_len = 71 } while (length(line) > max_len) } print prefix line } BEGIN { found = 0 re_name = name gsub(/\./, "\\.", re_name) re_name = "^[ \t]*" re_name "[ \t]*=" } !found && $0 ~ re_name { line = $0 while (substr(line, length(line), 1) == "\\") { getline line = line $0 } write_value() found = 1 next } { print } END { if (!found) write_value() } ' && cat "$tmpfile" >"$1" status=$? ac_clean "$tmpfile" return $status } function write_properties() { # Ecrire les propriétés $2..* dans le fichier $1. Les propriétés sont de la # forme "name=value" local __wp_propfile="$1"; shift local __wp_prop __wp_name __wp_value for __wp_prop in "$@"; do splitvar "$__wp_prop" __wp_name __wp_value write_property "$__wp_propfile" "$__wp_name" "$__wp_value" done }