module Mail

grammar ContentDisposition

  include RFC2822
  include RFC2045

  rule content_disposition
    disposition_type param_hashes:(CFWS ";" parameter CFWS)* {
      def parameters
        param_hashes.elements.map do |param|
          param.parameter.param_hash
        end
      end
    }
  end

  rule disposition_type
    [iI] [nN] [lL] [iI] [nN] [eE] / [aA] [tT] [tT] [aA] [cC] [hH] [mM] [eE] [nN] [tT] / extension_token / ''
  end

  rule extension_token
    ietf_token / custom_x_token
  end

  rule parameter
    CFWS? attr:attribute "=" val:value CFWS? {
      def param_hash
        {attr.text_value => val.text_value}
      end
    }
  end

  rule attribute
    token+
  end

  rule value
    quoted_string {
      def text_value
        quoted_content.text_value
      end
    } / (token / [\x3d])+
  end

end

end