__ini_value: add delimiter space detection

This adds spaces around the delimiter to provide some flexibility than
just do it in the delimiter string directly. It can be set via the
parameter `--delimiter-space`.
This commit is contained in:
matze 2021-03-11 21:50:55 +01:00
parent 9006994023
commit b76d848540
4 changed files with 34 additions and 15 deletions

View file

@ -48,6 +48,7 @@ BEGIN {
getline delimiter < (_param "delimiter")
getline value < (_param "value")
getline indentation < (_param "indentation")
getline delimiter_space < (_param "delimiter-space")
do_normalization = (system("test -f " (_param "normalize")) == 0)
@ -108,10 +109,9 @@ found_section {
# must only contain spaces
else start_spaces = ikey - 1
}
# start_spaces set or 0
idelspace_start = ikey + length(key)
idelspace_length = idel - (idelspace_start)
idelspace_length = idel - idelspace_start
# check for delimiter is only preceded with spaces
if(idelspace_length == 0 || check_spaces(substr(line, idelspace_start, idelspace_length))) {
found = 1
@ -129,8 +129,16 @@ found_section {
else {
# check if the format is important
if(do_normalization) {
if(match(found_value, /^[ \t]+/) == 1) {
found_value = substr(found_value, 1 + RLENGTH)
del_val_spacelen = RLENGTH
}
else
del_val_spacelen = 0
# the format must exactly match, else it is incorrect
if(indentation != start_spaces || idelspace_length != 0 || found_value != is_value)
if(start_spaces != indentation || found_value != is_value ||
idelspace_length != delimiter_space || del_val_spacelen != delimiter_space)
state("wrongformat")
}

View file

@ -6,9 +6,14 @@ BEGIN {
value = get_param_string("value")
comment = get_param_string("comment")
indentation = get_param_string("indentation")
delimiter_space = get_param_string("delimiter-space")
get_param_array("comment-sign", comment_signs)
comment_sign = comment_signs[0]
base_spaces = spaces(indentation)
delimiter_spaces = spaces(delimiter_space
delimiter_w_spaces = (delimiter_spaces delimiter delimiter_spaces)
}
function trim(var) {
@ -16,6 +21,12 @@ function trim(var) {
sub(/[ \t]*$/, "", var)
return var
}
function spaces(a) {
rspaces = ""
for(b = 0; b < a; b++)
rspaces = (rspaces " ")
return rspaces
}
function check_spaces(part) {
return match(part, /^[ \t]*$/) == 1
}
@ -40,22 +51,13 @@ function get_param_array(name, arr) {
# print value
function v_print() {
spaces = ""
for(i = 0; i < indentation; i++)
spaces = (spaces " ")
printf "%s%s%s%s%s", spaces, key, delimiter, value, ORS
printf "%s%s%s%s%s", base_spaces, key, delimiter_w_spaces, value, ORS
}
# print commented value
function v_print_commented() {
spaces = ""
for(i = 0; i < indentation; i++)
spaces = (spaces " ")
printf "%s%s%s%s%s%s", spaces, comment_sign, key, delimiter, value, ORS
printf "%s%s%s%s%s%s", base_spaces, comment_sign, key, delimiter_w_spaces, value, ORS
}
# print comment
function c_print() {
spaces = ""
for(i = 0; i < indentation; i++)
spaces = (spaces " ")
printf "%s%s%s%s%s", spaces, comment_sign, " ", comment, ORS
printf "%s%s%s%s%s", base_spaces, comment_sign, " ", comment, ORS
}

View file

@ -63,6 +63,14 @@ comment-sign
parameters are possible. It uses the first specified sign as comment
character if this type needs to insert comments.
delimiter-space
The number of spaces before and after the delimiter which should be free.
This number applies to each site of the delimiter separately, so one space
means one space to the left and right side of the delimiter.
The delimiter will be matched independendtly of this parameter and will
only be corrected if ``--normalize`` is set.
BOOLEAN PARAMETERS
------------------

View file

@ -4,3 +4,4 @@ state
value
indentation
comment
delimiter-space