114 lines
3.5 KiB
Bash
114 lines
3.5 KiB
Bash
##@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
|
|
}
|