diff --git a/Pmodules/libstd.bash b/Pmodules/libstd.bash index de49769..b39cced 100644 --- a/Pmodules/libstd.bash +++ b/Pmodules/libstd.bash @@ -352,6 +352,29 @@ std::get_type() { esac } +std::parse_yaml() { + # + # parse a YAML file + # See: https://gist.github.com/pkuczynski/8665367 + # + local -r fname="$1" + local -r prefix="$2" + local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @|tr @ '\034') + sed -ne "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \ + -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" "${fname}" | + awk -F$fs '{ + indent = length($1)/2; + vname[indent] = $2; + for (i in vname) { + if (i > indent) {delete vname[i]} + } + if (length($3) > 0) { + vn=""; + for (i=0; i