From: "NARUSE, Yui" Date: 2007-12-24T10:10:28+09:00 Subject: [ruby-dev:32695] ISO-2022-JP output for transcode This is a multi-part message in MIME format. --------------010201080003080506080804 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit 成瀬です。 transcode を ISO-2022-JP の出力に対応させるパッチを書いてみました。同様 に preprocessor で入力にも対応できますし、ISO-2022-JP 以外の ISO/IEC 2022 シリーズにも対応できるようになっています。 Martinさんの考えている方向とは違っているかもしれませんが、とりあえずクリ スマスリリースに入れる程度の品質は出ると思いますがいかがでしょう。 -- NARUSE, Yui DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA --------------010201080003080506080804 Content-Type: text/plain; name="iso_2022_jp.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="iso_2022_jp.patch" SW5kZXg6IHRyYW5zY29kZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRyYW5zY29kZS5jCSjjg6rj g5Pjgrjjg6fjg7MgMTQ1NjEpCisrKyB0cmFuc2NvZGUuYwko5L2c5qWt44Kz44OU44O8KQpA QCAtNjMsMTMgKzYzLDI1IEBACiAKIC8qIGRlY2xhcmF0aW9ucyBwcm9iYWJseSBuZWVkIHRv IGdvIGludG8gc2VwYXJhdGUgaGVhZGVyIGZpbGUsIGUuZy4gdHJhbnNjb2RlLmggKi8KIAor LyogZHluYW1pYyBzdHJ1Y3R1cmUsIG9uZSBwZXIgY29udmVyc2lvbiAoc2ltaWxhciB0byBp Y29udl90KSAqLworLyogbWF5IGNhcnJ5IGNvbnZlcnNpb24gc3RhdGUgKGUuZy4gZm9yIGlz by0yMDIyLWpwKSAqLwordHlwZWRlZiBzdHJ1Y3QgdHJhbnNjb2RpbmcgeworICAgIFZBTFVF IHJ1Ynlfc3RyaW5nX2Rlc3Q7IC8qIHRoZSBTdHJpbmcgdXNlZCBhcyB0aGUgY29udmVyc2lv biBkZXN0aW5hdGlvbiwKKwkJCSAgICAgICBvciBOVUxMIGlmIHNvbWV0aGluZyBlbHNlIGlz IGJlaW5nIGNvbnZlcnRlZCAqLworICAgIGNoYXIgKigqZmx1c2hfZnVuYykoc3RydWN0IHRy YW5zY29kaW5nKiwgaW50LCBpbnQpOworfSB0cmFuc2NvZGluZzsKKwogLyogc3RhdGljIHN0 cnVjdHVyZSwgb25lIHBlciBzdXBwb3J0ZWQgZW5jb2RpbmcgcGFpciAqLwotdHlwZWRlZiBz dHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgdHJhbnNjb2Rlcl9zdHsKICAgICBjb25zdCBjaGFy ICpmcm9tX2VuY29kaW5nOwogICAgIGNvbnN0IGNoYXIgKnRvX2VuY29kaW5nOwogICAgIGNv bnN0IEJZVEVfTE9PS1VQICpjb252X3RyZWVfc3RhcnQ7CiAgICAgaW50IG1heF9vdXRwdXQ7 CiAgICAgaW50IGZyb21fdXRmODsKKyAgICB2b2lkICgqcHJlcHJvY2Vzc29yKShjaGFyKios IGNoYXIqKiwgY2hhciosIGNoYXIqLAorCQkJCXN0cnVjdCB0cmFuc2NvZGVyX3N0ICp0cmFu c2NvZGVyLCBzdHJ1Y3QgdHJhbnNjb2RpbmcqKTsKKyAgICB2b2lkICgqcG9zdHByb2Nlc3Nv cikoY2hhcioqLCBjaGFyKiosIGNoYXIqLCBjaGFyKiwKKwkJCQkgc3RydWN0IHRyYW5zY29k ZXJfc3QgKnRyYW5zY29kZXIsIHN0cnVjdCB0cmFuc2NvZGluZyopOwogfSB0cmFuc2NvZGVy OwogCiAvKiB0b2RvOiBkeW5hbWljIHN0cnVjdHVyZSwgb25lIHBlciBjb252ZXJzaW9uIChz dHJlYW0pICovCkBAIC0xMDAsNiArMTEyLDEzNyBAQAogfQogCiBzdGF0aWMgdm9pZAorcmVn aXN0ZXJfZnVuY3Rpb25hbF90cmFuc2NvZGVyKGNvbnN0IGNoYXIgKmZyb21fZSwgY29uc3Qg Y2hhciAqdG9fZSwKKyAgICBjb25zdCBCWVRFX0xPT0tVUCAqdHJlZV9zdGFydCwgaW50IG1h eF9vdXRwdXQsIGludCBmcm9tX3V0ZjgsCisgICAgdm9pZCAoKnByZXByb2Nlc3NvcikoY2hh cioqLCBjaGFyKiosIGNoYXIqLCBjaGFyKiwgdHJhbnNjb2RlciosIHRyYW5zY29kaW5nKiks CisgICAgdm9pZCAoKnBvc3Rwcm9jZXNzb3IpKGNoYXIqKiwgY2hhcioqLCBjaGFyKiwgY2hh ciosIHRyYW5zY29kZXIqLCB0cmFuc2NvZGluZyopKQoreworICAgIHN0YXRpYyBpbnQgbiA9 IDA7CisgICAgaWYgKG4gPj0gTUFYX1RSQU5TQ09ERVJTKSB7CisJLyogd2UgYXJlIGluaXRp YWxpemluZywgaXMgaXQgb2theSB0byB1c2UgcmJfcmFpc2UgaGVyZT8gKi8KKwlyYl9yYWlz ZShyYl9lUnVudGltZUVycm9yIC8qY2hhbmdlIGV4Y2VwdGlvbiovLCAibm90IGVub3VnaCB0 cmFuc2NvZGVyIHNsb3RzIik7CisgICAgfQorICAgIHRyYW5zY29kZXJfdGFibGVbbl0uZnJv bV9lbmNvZGluZyA9IGZyb21fZTsKKyAgICB0cmFuc2NvZGVyX3RhYmxlW25dLnRvX2VuY29k aW5nID0gdG9fZTsKKyAgICB0cmFuc2NvZGVyX3RhYmxlW25dLmNvbnZfdHJlZV9zdGFydCA9 IHRyZWVfc3RhcnQ7CisgICAgdHJhbnNjb2Rlcl90YWJsZVtuXS5tYXhfb3V0cHV0ID0gbWF4 X291dHB1dDsKKyAgICB0cmFuc2NvZGVyX3RhYmxlW25dLmZyb21fdXRmOCA9IGZyb21fdXRm ODsKKyAgICB0cmFuc2NvZGVyX3RhYmxlW25dLmNvbnZfdHJlZV9zdGFydCA9IHRyZWVfc3Rh cnQ7CisgICAgdHJhbnNjb2Rlcl90YWJsZVtuXS5wcmVwcm9jZXNzb3IgPSBwcmVwcm9jZXNz b3I7CisgICAgdHJhbnNjb2Rlcl90YWJsZVtuXS5wb3N0cHJvY2Vzc29yID0gcG9zdHByb2Nl c3NvcjsKKworICAgIG4rKzsKK30KKworI2RlZmluZSBJU09fMjAyMl9FTkNPRElORyhlc2Nz ZXEsIGJ5dGUpICgoZXNjc2VxPDw4KXxieXRlKQorZW51bSBJU09fMjAyMl9FU0NTRVEgewor ICAgIElTT18yMDIyX0NaRCAgID0gJyEnLAorICAgIElTT18yMDIyX0MxRCAgID0gJyInLAor ICAgIElTT18yMDIyX0daRDQgID0gJygnLAorICAgIElTT18yMDIyX0cxRDQgID0gJyknLAor ICAgIElTT18yMDIyX0cyRDQgID0gJyonLAorICAgIElTT18yMDIyX0czRDQgID0gJysnLAor ICAgIElTT18yMDIyX0cxRDYgID0gJy0nLAorICAgIElTT18yMDIyX0cyRDYgID0gJy4nLAor ICAgIElTT18yMDIyX0czRDYgID0gJy8nLAorICAgIElTT18yMDIyX0daRE00ID0gSVNPXzIw MjJfRU5DT0RJTkcoJyQnLCcoJyksCisgICAgSVNPXzIwMjJfRzFETTQgPSBJU09fMjAyMl9F TkNPRElORygnJCcsJyknKSwKKyAgICBJU09fMjAyMl9HMkRNNCA9IElTT18yMDIyX0VOQ09E SU5HKCckJywnKicpLAorICAgIElTT18yMDIyX0czRE00ID0gSVNPXzIwMjJfRU5DT0RJTkco JyQnLCcrJyksCisgICAgSVNPXzIwMjJfRzFETTYgPSBJU09fMjAyMl9FTkNPRElORygnJCcs Jy0nKSwKKyAgICBJU09fMjAyMl9HMkRNNiA9IElTT18yMDIyX0VOQ09ESU5HKCckJywnLicp LAorICAgIElTT18yMDIyX0czRE02ID0gSVNPXzIwMjJfRU5DT0RJTkcoJyQnLCcvJyksCisg ICAgSVNPXzIwMjJfRE9DUyAgPSBJU09fMjAyMl9FTkNPRElORygnJScsJ0knKSwKKyAgICBJ U09fMjAyMl9JUlIgICA9ICcmJworfTsKKworCisjZGVmaW5lIElTT18yMDIyX0daX0FTQ0lJ CQkJSVNPXzIwMjJfRU5DT0RJTkcoSVNPXzIwMjJfR1pENCwgJ0InKQorI2RlZmluZSBJU09f MjAyMl9HWl9KSVNfWF8wMjAxX0thdGFrYW5hCQlJU09fMjAyMl9FTkNPRElORyhJU09fMjAy Ml9HWkQ0LCAnSScpCisjZGVmaW5lIElTT18yMDIyX0daX0pJU19YXzAyMDFfUm9tYW4JCUlT T18yMDIyX0VOQ09ESU5HKElTT18yMDIyX0daRDQsICdKJykKKyNkZWZpbmUgSVNPXzIwMjJf R1pfSklTX0NfNjIyNl8xOTc4CQlJU09fMjAyMl9FTkNPRElORyhJU09fMjAyMl9HWkRNNCwn QCcpCisjZGVmaW5lIElTT18yMDIyX0daX0pJU19YXzAyMDhfMTk4MwkJSVNPXzIwMjJfRU5D T0RJTkcoSVNPXzIwMjJfR1pETTQsJ0InKQorI2RlZmluZSBJU09fMjAyMl9HWl9KSVNfWF8w MjEyXzE5OTAJCUlTT18yMDIyX0VOQ09ESU5HKElTT18yMDIyX0daRE00LCdEJykKKyNkZWZp bmUgSVNPXzIwMjJfR1pfSklTX1hfMDIxM18yMDAwXzEJCUlTT18yMDIyX0VOQ09ESU5HKElT T18yMDIyX0daRE00LCdPJykKKyNkZWZpbmUgSVNPXzIwMjJfR1pfSklTX1hfMDIxM18yMDAw XzIJCUlTT18yMDIyX0VOQ09ESU5HKElTT18yMDIyX0daRE00LCdQJykKKyNkZWZpbmUgSVNP XzIwMjJfR1pfSklTX1hfMDIxM18yMDA0XzEJCUlTT18yMDIyX0VOQ09ESU5HKElTT18yMDIy X0daRE00LCdRJykKKworc3RhdGljIGludAorc2VsZWN0X2lzb18yMDIyX21vZGUoY2hhciAq Km91dF9wb3MsIGludCBuZXdfbW9kZSkKK3sKKyAgICBjaGFyICpvdXRfcCA9ICpvdXRfcG9z OworICAgICpvdXRfcCsrID0gJ1xlJzsKKyAgICBzd2l0Y2ggKG5ld19tb2RlPj44KQorICAg IHsKKyAgICBjYXNlIElTT18yMDIyX0daRDQ6CisJKm91dF9wKysgPSBuZXdfbW9kZSA+PiA4 OworCSpvdXRfcCsrID0gbmV3X21vZGUgJiAweDdGOworCWJyZWFrOworICAgIGNhc2UgSVNP XzIwMjJfR1pETTQ6CisJKm91dF9wKysgPSBuZXdfbW9kZSA+PiAxNjsKKwlpZiAoKG5ld19t b2RlICYgMHg3RikgIT0gJ0AnICYmCisJICAgIChuZXdfbW9kZSAmIDB4N0YpICE9ICdBJyAm JgorCSAgICAobmV3X21vZGUgJiAweDdGKSAhPSAnQicpCisJeworCSAgICAqb3V0X3ArKyA9 IChuZXdfbW9kZT4+OCkgJiAweDdGOworCX0KKwkqb3V0X3ArKyA9IG5ld19tb2RlICYgMHg3 RjsKKwlicmVhazsKKyAgICBkZWZhdWx0OgorCXJiX3JhaXNlKHJiX2VSdW50aW1lRXJyb3Ig LypjaGFuZ2UgZXhjZXB0aW9uKi8sICJ0aGlzIG1vZGUgaXMgbm90IHN1cHBvcnRlZC4iKTsK KwlicmVhazsKKyAgICB9CisgICAgKm91dF9wb3MgPSBvdXRfcDsKKyAgICByZXR1cm4gbmV3 X21vZGU7Cit9CisKK3N0YXRpYyB2b2lkCitpc29fMjAyMl9qcF90cmFuc2NvZGVyX3Bvc3Rw cm9jZXNzb3IoY2hhciAqKmluX3BvcywgY2hhciAqKm91dF9wb3MsCisJCQkJICAgICBjaGFy ICppbl9zdG9wLCBjaGFyICpvdXRfc3RvcCwKKwkJCQkgICAgIHRyYW5zY29kZXIgKm15X3Ry YW5zY29kZXIsCisJCQkJICAgICB0cmFuc2NvZGluZyAqbXlfdHJhbnNjb2RpbmcpCit7Cisg ICAgY2hhciAqaW5fcCA9ICppbl9wb3MsICpvdXRfcCA9ICpvdXRfcG9zOworICAgIGludCBj dXJfbW9kZSA9IElTT18yMDIyX0daX0FTQ0lJLCBuZXdfbW9kZSA9IDA7CisgICAgdW5zaWdu ZWQgY2hhciBuZXh0X2J5dGU7CisgICAgY2hhciAqb3V0X3MgPSBvdXRfc3RvcCAtIG15X3Ry YW5zY29kZXItPm1heF9vdXRwdXQgKyAxOworICAgIHdoaWxlIChpbl9wIDwgaW5fc3RvcCkg eworCWlmIChvdXRfcCA+PSBvdXRfcykgeworCSAgICBpbnQgbGVuID0gKG91dF9wIC0gKm91 dF9wb3MpOworCSAgICBpbnQgbmV3X2xlbiA9IChsZW4gKyBteV90cmFuc2NvZGVyLT5tYXhf b3V0cHV0KSAqIDI7CisJICAgICpvdXRfcG9zID0gKCpteV90cmFuc2NvZGluZy0+Zmx1c2hf ZnVuYykobXlfdHJhbnNjb2RpbmcsIGxlbiwgbmV3X2xlbik7CisJICAgIG91dF9wID0gKm91 dF9wb3MgKyBsZW47CisJICAgIG91dF9zID0gKm91dF9wb3MgKyBuZXdfbGVuIC0gbXlfdHJh bnNjb2Rlci0+bWF4X291dHB1dDsKKwl9CisJbmV4dF9ieXRlID0gKmluX3ArKzsKKwlpZiAo bmV4dF9ieXRlIDwgMHg4MCkgeworCSAgICBuZXdfbW9kZSA9IElTT18yMDIyX0daX0FTQ0lJ OworCX0gZWxzZSBpZiAobmV4dF9ieXRlID09IDB4OEUpIHsKKwkgICAgbmV3X21vZGUgPSBJ U09fMjAyMl9HWl9KSVNfWF8wMjAxX0thdGFrYW5hOworCSAgICBuZXh0X2J5dGUgPSAqaW5f cCsrOworCX0gZWxzZSBpZiAobmV4dF9ieXRlID09IDB4OEYpIHsKKwkgICAgbmV3X21vZGUg PSBJU09fMjAyMl9HWl9KSVNfWF8wMjEyXzE5OTA7CisJICAgIG5leHRfYnl0ZSA9ICppbl9w Kys7CisJfSBlbHNlIHsKKwkgICAgbmV3X21vZGUgPSBJU09fMjAyMl9HWl9KSVNfWF8wMjA4 XzE5ODM7CisJfQorCWlmIChjdXJfbW9kZSAhPSBuZXdfbW9kZSkKKwkgICAgY3VyX21vZGUg PSBzZWxlY3RfaXNvXzIwMjJfbW9kZSgmb3V0X3AsIG5ld19tb2RlKTsKKwlpZiAoY3VyX21v ZGUgPCAweEZGRkYpIHsKKwkgICAgKm91dF9wKysgPSBuZXh0X2J5dGUgJiAweDdGOworCX0g ZWxzZSB7CisJICAgICpvdXRfcCsrID0gbmV4dF9ieXRlICYgMHg3RjsKKwkgICAgKm91dF9w KysgPSAqaW5fcCsrICYgMHg3RjsKKwl9CisgICAgfQorICAgIGlmIChjdXJfbW9kZSAhPSBJ U09fMjAyMl9HWl9BU0NJSSkKKwljdXJfbW9kZSA9IHNlbGVjdF9pc29fMjAyMl9tb2RlKCZv dXRfcCwgSVNPXzIwMjJfR1pfQVNDSUkpOworICAgIC8qIGNsZWFudXAgKi8KKyAgICAqaW5f cG9zICA9IGluX3A7CisgICAgKm91dF9wb3MgPSBvdXRfcDsKK30KKworc3RhdGljIHZvaWQK IGluaXRfdHJhbnNjb2Rlcl90YWJsZSh2b2lkKQogewogICAgIHJlZ2lzdGVyX3RyYW5zY29k ZXIoIklTTy04ODU5LTEiLCAgIlVURi04IiwgJnJiX2Zyb21fSVNPXzg4NTlfMSwgMiwgMCk7 CkBAIC0xMzUsNiArMjc4LDggQEAKICAgICByZWdpc3Rlcl90cmFuc2NvZGVyKCJFVUMtSlAi LCAiVVRGLTgiLCAgICAgICZyYl9mcm9tX0VVQ19KUCwgMywgMCk7CiAgICAgcmVnaXN0ZXJf dHJhbnNjb2RlcigiVVRGLTgiLCAiU0hJRlRfSklTIiwgICAmcmJfdG9fU0hJRlRfSklTLCAy LCAxKTsKICAgICByZWdpc3Rlcl90cmFuc2NvZGVyKCJVVEYtOCIsICJFVUMtSlAiLCAgICAg ICZyYl90b19FVUNfSlAsIDIsIDEpOworICAgIHJlZ2lzdGVyX2Z1bmN0aW9uYWxfdHJhbnNj b2RlcigiVVRGLTgiLCAiSVNPLTIwMjItSlAiLCAmcmJfdG9fRVVDX0pQLAorCQkJCSAgIDgs IDEsIE5VTEwsIGlzb18yMDIyX2pwX3RyYW5zY29kZXJfcG9zdHByb2Nlc3Nvcik7CiAKICAg ICByZWdpc3Rlcl90cmFuc2NvZGVyKE5VTEwsIE5VTEwsIE5VTEwsIDAsIDApOwogfQpAQCAt MTY1LDE1ICszMTAsNyBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi0vKiBkeW5hbWljIHN0 cnVjdHVyZSwgb25lIHBlciBjb252ZXJzaW9uIChzaW1pbGFyIHRvIGljb252X3QpICovCi0v KiBtYXkgY2FycnkgY29udmVyc2lvbiBzdGF0ZSAoZS5nLiBmb3IgaXNvLTIwMjItanApICov Ci10eXBlZGVmIHN0cnVjdCB0cmFuc2NvZGluZyB7Ci0gICAgVkFMVUUgcnVieV9zdHJpbmdf ZGVzdDsgLyogdGhlIFN0cmluZyB1c2VkIGFzIHRoZSBjb252ZXJzaW9uIGRlc3RpbmF0aW9u LAotCQkJICAgICAgIG9yIE5VTEwgaWYgc29tZXRoaW5nIGVsc2UgaXMgYmVpbmcgY29udmVy dGVkICovCi0gICAgY2hhciAqKCpmbHVzaF9mdW5jKShzdHJ1Y3QgdHJhbnNjb2RpbmcqLCBp bnQsIGludCk7Ci19IHRyYW5zY29kaW5nOwogCi0KIC8qCiAgKiAgVHJhbnNjb2RpbmcgZW5n aW5lIGxvZ2ljCiAgKi8KQEAgLTM0Niw3ICs0ODMsMjUgQEAKIAlidWYgPSBSU1RSSU5HX1BU UihkZXN0KTsKIAkqYnAgPSAnXDAnOwogCXJiX3N0cl9zZXRfbGVuKGRlc3QsIGJwIC0gYnVm KTsKKwlpZiAobXlfdHJhbnNjb2Rlci0+cG9zdHByb2Nlc3NvcikKKwl7CisJICAgIHN0ciA9 IGRlc3Q7CisJICAgIGZyb21wID0gc3AgPSBSU1RSSU5HX1BUUihzdHIpOworCSAgICBzbGVu ID0gUlNUUklOR19MRU4oc3RyKTsKKwkgICAgYmxlbiA9IHNsZW4gKyAzMDsgLyogbGVuICsg bWFyZ2luICovCisJICAgIGRlc3QgPSByYl9zdHJfdG1wX25ldyhibGVuKTsKKwkgICAgYnAg PSBSU1RSSU5HX1BUUihkZXN0KTsKKwkgICAgbXlfdHJhbnNjb2RpbmcucnVieV9zdHJpbmdf ZGVzdCA9IGRlc3Q7CisJICAgICgqbXlfdHJhbnNjb2Rlci0+cG9zdHByb2Nlc3NvcikoJmZy b21wLCAmYnAsIChzcCtzbGVuKSwgKGJwK2JsZW4pLCBteV90cmFuc2NvZGVyLCAmbXlfdHJh bnNjb2RpbmcpOworCSAgICBpZiAoZnJvbXAgIT0gc3Arc2xlbikgeworCQlyYl9yYWlzZShy Yl9lQXJnRXJyb3IsICJub3QgZnVsbHkgY29udmVydGVkLCAlZCBieXRlcyBsZWZ0Iiwgc3Ar c2xlbi1mcm9tcCk7CisJICAgIH0KKwkgICAgYnVmID0gUlNUUklOR19QVFIoZGVzdCk7CisJ ICAgICpicCA9ICdcMCc7CisJICAgIHJiX3N0cl9zZXRfbGVuKGRlc3QsIGJwIC0gYnVmKTsK IAorCX0KKwogCWlmIChlbmNvZGluZ19lcXVhbChteV90cmFuc2NvZGVyLT50b19lbmNvZGlu ZywgdG9fZSkpIHsKIAkgICAgZmluYWxfZW5jb2RpbmcgPSAxOwogCX0K --------------010201080003080506080804--