;rfc 6266, see content-disposition.clj
content-disposition         = <LWSP> content-disposition-type *( <LWSP> <";"> <LWSP> content-disposition-param)
content-disposition-type    = token
content-disposition-param   = parameter

;rfc 5987, see parameters.clj
parameter                = reg-parameter / ext-parameter
reg-parameter            = parmname LWSP "=" LWSP reg-value
ext-parameter            = parmname "*" LWSP "=" LWSP ext-value
parmname                 = 1*attr-char

ext-value                = charset  <"'"> [ language ] <"'"> ext-value-chars
charset                  = "UTF-8" / "ISO-8859-1" / mime-charset
mime-charset             = 1*mime-charsetc
mime-charsetc            = ALPHA / DIGIT / #'[!#$%&+-^_`{}~]'
language                 = *( ALPHA / DIGIT / "-" )

ext-value-chars          = *( pct-encoded / attr-char )

pct-encoded              = "%" HEXDIG HEXDIG

;;this is what the spec says
;;attr-char              = #'[^()<>@,;:\\"/\[\]?={} \t*\'%]'

;;this is what reality says
attr-char                = #'[^;:\\"% =\t]'

;rfc 2616, see parser.clj
reg-value                = token / quoted-string

token                    = 1*token-char
token-char               = #'[^()<>@,;:\\"/\[\]?={} \t]'

quoted-string            = ( <DQUOTE> *( qdtext / quoted-pair ) <DQUOTE> )
qdtext                   = #'[^"]'
quoted-pair              = "\" DQUOTE
