#!/usr/bin/env ruby21 # coding: binary require 'nkf' Encoding.default_external = Encoding::BINARY Encoding.default_internal = Encoding::BINARY boundary="--"+ARGV[0] # +"\r\n" tmpdir=(ARGV[1] || "tmp") test(?d, tmpdir) || Dir.mkdir("tmp") stream=STDIN.readlines.join stream.split(boundary)[1..-2].each do |x| header = x.sub(/\r\n\r\n.*/, "") name = header.scan(/\bname=([\"']?)(.*?)\1/)[0][1] body = x.sub(/.*?\r\n\r\n/m, "").sub(/\r\n$/, "") STDERR.printf("body[%s]=[%s]\n", name, body.length) if /filename=(['\"]?)(.*?)\1/ =~ header && $2 > "" fn = $2 open(File.expand_path(fn, tmpdir), "w") do |out| out.write body end printf("%s:filename=%s\n", name, fn) elsif /name=(['\"]?)(.*?)\1/ =~ header v=$2 out=NKF::nkf("-w -MQ", body).gsub(/([^=])\n/, "\\1=0a").gsub(/=\n/, "") printf("%s=%s\n", v, out) end end