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
 | |
| }
 | 
