support des attributs ordonnés

This commit is contained in:
Jephté Clain 2015-04-16 13:41:40 +04:00
parent 00088b30b2
commit 75f21b5a52
1 changed files with 55 additions and 35 deletions

View File

@ -505,41 +505,6 @@ END {
function tl_ensureval() { function tl_ensureval() {
local attr="$1"; shift local attr="$1"; shift
local script="$(def_match_attr "$attr") local script="$(def_match_attr "$attr")
function resetp() {
ensure = 0
found = 0
}
function get_attrvalue(line) {
sub(/^[^:]+::?[ ]+/, \"\", line)
return line
}
function add_to_found_values(value) {
found_values[found_count] = value
found_count++
}
function in_found_values(value, i) {
for (i = 0; i < found_count; i++) {
if (found_values[i] == value) {
return 1
}
}
return 0
}
function print_ensure_values() {
for (i = 0; i < ensure_count; i++) {
print attr \" \" ensure_values[i]
}
resetp()
}
function print_missing_values( value) {
for (i = 0; i < ensure_count; i++) {
value = ensure_values[i]
if (!in_found_values(value)) {
print attr \" \" value
}
}
resetp()
}
BEGIN { BEGIN {
resetp() resetp()
attr = fix_attr($(quoted_awk "$attr")) attr = fix_attr($(quoted_awk "$attr"))
@ -556,6 +521,55 @@ BEGIN {
found_values[0] = 0 found_values[0] = 0
delete found_values delete found_values
}"' }"'
function resetp() {
ensure = 0
found = 0
}
function get_attrvalue(line) {
sub(/^[^:]+::?[ ]+/, "", line)
return line
}
function add_to_found_values(value) {
found_values[found_count] = value
found_count++
}
function in_found_values(value, i, found_value) {
if (value ~ /^{}/) {
sub(/^{}/, "", value)
for (i = 0; i < found_count; i++) {
found_value = found_values[i]
sub(/^{[0-9]+}/, "", found_value)
if (found_value == value) {
return 1
}
}
} else {
for (i = 0; i < found_count; i++) {
if (found_values[i] == value) {
return 1
}
}
}
return 0
}
function print_ensure_values() {
for (i = 0; i < ensure_count; i++) {
value = ensure_values[i]
sub(/^{}/, "", value)
print attr " " value
}
resetp()
}
function print_missing_values( value) {
for (i = 0; i < ensure_count; i++) {
value = ensure_values[i]
if (!in_found_values(value)) {
sub(/^{}/, "", value)
print attr " " value
}
}
resetp()
}
/^dn:/ { /^dn:/ {
ensure = 1 ensure = 1
} }
@ -1056,6 +1070,12 @@ ev, ensureval ATTR VALUES...
déjà. Par exemple, pour s'assurer que l'attribut ATTR a les valeurs V0 et déjà. Par exemple, pour s'assurer que l'attribut ATTR a les valeurs V0 et
V1, on ferait: V1, on ferait:
ensureval ATTR V0 V1 // modaddval ensureval ATTR V0 V1 // modaddval
Certains attributs sont ordonnés. Leurs valeurs sont étiquettées avec leur
index, e.g {2}value. Si l'on ne veut pas faire de correspondance exacte,
c'est à dire tester uniquement la présence d'une valeur indépendamment de
son index, il faut utiliser la syntaxe {}value, e.g:
ensureval ATTR {}value // modaddval
S'il faut ajouter les valeurs, elle sont mentionnées sans le préfixe {}
sed ARGS sed ARGS
awk ARGS awk ARGS
grep ARGS grep ARGS