rof.bash
#!/usr/bin/env bash
str="$(cat test.rof)"
declare -A ROF_CONF
state=""
stOpen="0"
stKey=1
curKey=""
curValue=""
function conf_load(){
while read -r line; do
key=$(echo "$line" | sed -E 's/^([a-zA-Z._-]+):.*/\1/')
if [[ "$key" != "$line" ]];then
if [[ -n "$curKey" ]];then
while [[ "${curValue:(-1)}" == " " || "${curValue:(-2)}" == "\n" ]];do
if [[ "${curValue:(-1)}" == " " ]];then
curValue="${curValue:0:-1}"
else
curValue="${curValue:0:-2}"
fi
done
if [[ "${curValue:(-1)}" == "\\" ]];then
curValue="${curValue:0:-1}"
fi
ROF_CONF["$curKey"]="$curValue"
fi
len="${#key}"
len=$(( len + 1 ))
value="${line:${len}}"
while [[ "${value:0:1}" == " " ]];do
value="${value:1}"
done
if [[ "${value:0:1}" == "\\" ]];then
value=${value:1}
fi
curKey="$key"
curValue="$value"
else
if [[ "${line:0:1}" == "\\" ]];then
line=${line:1}
fi
if [[ "${line:-1}" == "\\" ]];then
echo '################trim end'
line="${line:0:-1}"
fi
curValue+="\n"
curValue+=$line
fi
done <<< "$str"
while [[ "${curValue:(-1)}" == " " || "${curValue:(-2)}" == "\n" ]];do
if [[ "${curValue:(-1)}" == " " ]];then
curValue="${curValue:0:-1}"
else
curValue="${curValue:0:-2}"
fi
done
if [[ "${curValue:(-1)}" == "\\" ]];then
curValue="${curValue:0:-1}"
fi
ROF_CONF["$curKey"]="$curValue"
}
function conf_get(){
key="$1"
OUT="${ROF_CONF["$key"]}"
echo -e "$OUT"
}
function conf_set(){
key="$1"
val="$2"
ROF_CONF["$key"]="$val"
}
function conf_save(){
file="test-out.rof"
: > $file
out=""
for key in "${!ROF_CONF[@]}"; do
out="${key}: "
value="${ROF_CONF["$key"]}";
if [[ "${value:0:1}" == " " ]];then
value="\\${value}"
fi
if [[ "${value:(-1)}" == " " ]];then
value="${value}\\"
fi
c=0
value=$(echo -e "$value")
while read -r line; do
storeValue=""
if [[ $c -eq 0 ]];then
c=1
storeValue+="$line"
echo -e "${key}: $line" >> $file
continue;
fi
if [[ "$line" =~ ^([a-zA-Z._-]+):.* ]];then
line="\\$line"
elif [[ "${line:0:1}" == "\\" ]];then
line="\\$line"
fi
storeValue+="$line"
storeValue+=$(echo -e "\n")
echo "$storeValue" >> $file
done <<< "$value"
echo "" >> $file
done
}
conf_load
conf_set a.one "I am a new value for a.one"
conf_save
echo "######################### CAT FILE ####################################"
cat test-out.rof