" Vim syntax file
" Language:		gpg(1) configuration file
" Previous Maintainer:	Nikolai Weibull <now@bitwi.se>
" Latest Revision:	2010-10-14
" Updated:		2023-01-23 @ObserverOfTime: added a couple of keywords

if exists("b:current_syntax")
  finish
endif

let s:cpo_save = &cpo
set cpo&vim

setlocal iskeyword+=-

syn keyword gpgTodo	contained FIXME TODO XXX NOTE

syn region  gpgComment	contained display oneline start='#' end='$'
			\ contains=gpgTodo,gpgID,@Spell

syn match   gpgID	contained display '\<\(0x\)\=\x\{8,}\>'

syn match   gpgBegin	display '^' skipwhite nextgroup=gpgComment,gpgOption,gpgCommand

syn keyword gpgCommand	contained skipwhite nextgroup=gpgArg
			\ check-sigs decrypt decrypt-files delete-key
			\ delete-secret-and-public-key delete-secret-key
			\ edit-key encrypt-files export export-all
			\ export-ownertrust export-secret-keys
			\ export-secret-subkeys fast-import fingerprint
			\ gen-prime gen-random import import-ownertrust
			\ list-keys list-public-keys list-secret-keys
			\ list-sigs lsign-key nrsign-key print-md print-mds
			\ recv-keys search-keys send-keys sign-key verify
			\ verify-files
syn keyword gpgCommand	contained skipwhite nextgroup=gpgArgError
			\ check-trustdb clearsign desig-revoke detach-sign
			\ encrypt gen-key gen-revoke help list-packets
			\ rebuild-keydb-caches sign store symmetric
			\ update-trustdb version warranty

syn keyword gpgOption	contained skipwhite nextgroup=gpgArg
			\ attribute-fd cert-digest-algo charset cipher-algo
			\ command-fd comment completes-needed compress
			\ compress-algo debug default-cert-check-level
			\ default-key default-preference-list
			\ default-recipient digest-algo disable-cipher-algo
			\ disable-pubkey-algo encrypt-to exec-path
			\ export-options group homedir import-options
			\ keyring keyserver keyserver-options load-extension
			\ local-user logger-fd marginals-needed max-cert-depth
			\ notation-data options output override-session-key
			\ passphrase-fd personal-cipher-preferences
			\ personal-compress-preferences
			\ personal-digest-preferences photo-viewer
			\ recipient s2k-cipher-algo s2k-digest-algo s2k-mode
			\ secret-keyring set-filename set-policy-url status-fd
			\ trusted-key verify-options keyid-format list-options
			\ default-new-key-algo weak-digest
syn keyword gpgOption	contained skipwhite nextgroup=gpgArgError
			\ allow-freeform-uid allow-non-selfsigned-uid
			\ allow-secret-key-import always-trust
			\ armor ask-cert-expire ask-sig-expire
			\ auto-check-trustdb batch debug-all default-comment
			\ default-recipient-self dry-run emit-version
			\ emulate-md-encode-bug enable-special-filenames
			\ escape-from-lines expert fast-list-mode
			\ fixed-list-mode for-your-eyes-only
			\ force-mdc force-v3-sigs force-v4-certs
			\ gpg-agent-info ignore-crc-error ignore-mdc-error
			\ ignore-time-conflict ignore-valid-from interactive
			\ list-only lock-multiple lock-never lock-once
			\ merge-only no no-allow-non-selfsigned-uid
			\ no-armor no-ask-cert-expire no-ask-sig-expire
			\ no-auto-check-trustdb no-batch no-comment
			\ no-default-keyring no-default-recipient
			\ no-encrypt-to no-expensive-trust-checks
			\ no-expert no-for-your-eyes-only no-force-v3-sigs
			\ no-force-v4-certs no-greeting no-literal
			\ no-mdc-warning no-options no-permission-warning
			\ no-pgp2 no-pgp6 no-pgp7 no-random-seed-file
			\ no-secmem-warning no-show-notation no-show-photos
			\ no-show-policy-url no-sig-cache no-sig-create-check
			\ no-sk-comments no-tty no-utf8-strings no-verbose
			\ no-version not-dash-escaped openpgp pgp2
			\ pgp6 pgp7 preserve-permissions quiet rfc1991
			\ set-filesize show-keyring show-notation show-photos
			\ show-policy-url show-session-key simple-sk-checksum
			\ sk-comments skip-verify textmode throw-keyid
			\ try-all-secrets use-agent use-embedded-filename
			\ utf8-strings verbose with-colons with-fingerprint
			\ with-key-data yes

syn match   gpgArg	contained display '\S\+\(\s\+\S\+\)*' contains=gpgID
syn match   gpgArgError contained display '\S\+\(\s\+\S\+\)*'

hi def link gpgComment	Comment
hi def link gpgTodo	Todo
hi def link gpgID	Number
hi def link gpgOption	Keyword
hi def link gpgCommand	Error
hi def link gpgArgError Error

let b:current_syntax = "gpg"

let &cpo = s:cpo_save
unlet s:cpo_save
