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