54 lines
1.9 KiB
Plaintext
54 lines
1.9 KiB
Plaintext
#compdef plutil
|
|
|
|
local ret=1 k v
|
|
local -a context line state state_descr tmp fmts=( xml1 binary1 json )
|
|
local -A opt_args val_args types=(
|
|
-bool 'boolean'
|
|
-data 'base64-encoded data'
|
|
-date 'date (XML property-list format)'
|
|
-float '64-bit float'
|
|
-integer '64-bit integer'
|
|
-json 'JSON fragment'
|
|
-xml 'XML property list'
|
|
)
|
|
|
|
_arguments -s -S : \
|
|
'(: -)-help[display help information]' \
|
|
'(-p -r)-s[suppress normal output]' \
|
|
'*:input file:_files' \
|
|
- set1 \
|
|
'-lint[check input for syntax errors]' \
|
|
- set2 \
|
|
"(-extract -insert -replace -remove)-convert[convert to specified format]:output format:(${(j< >)fmts})" \
|
|
"(-convert -insert -replace -remove)-extract[extract value at specified key path from property list]: :->k:output format:(${(j< >)fmts})" \
|
|
'(-convert -extract -replace -remove)-insert[insert value at specified key path into property list]: :->k: :->t: :->v' \
|
|
'(-convert -extract -insert -remove)-replace[replace value at specified key path in property list]: :->k: :->t: :->v' \
|
|
'(-convert -extract -insert -replace)-remove[remove value at specified key path from property list]: :->k' \
|
|
'(-o -extract -insert -replace -remove)-e[specify output file extension]:output file extension' \
|
|
'(-e -extract -insert -replace -remove)-o[specify output file]:output file:_files' \
|
|
'(-r -s)-p[pretty-print property list]' \
|
|
'(-p -s)-r[pretty-print JSON]' \
|
|
&& ret=0
|
|
|
|
case $state in
|
|
k) _message 'key path' && ret=0 ;;
|
|
t)
|
|
tmp=()
|
|
for k v in ${(kv)types}; do
|
|
tmp+=( "${k}[${v}]" )
|
|
done
|
|
_values 'value type' $tmp && ret=0
|
|
;;
|
|
v)
|
|
if [[ $words[(CURRENT - 1)] == -bool ]]; then
|
|
_values $types[-bool] YES NO true false && ret=0
|
|
elif (( $+types[$words[(CURRENT - 1)]] )); then
|
|
_message $types[$words[(CURRENT - 1)]] && ret=0
|
|
else
|
|
_message value && ret=0
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
return ret
|