From: "Yugui (Yuki Sonoda)" Date: 2008-12-26T19:06:06+09:00 Subject: [ruby-dev:37610] Re: M17N of erb(1) Was: Re: Current status of 1.9.1 RC1's issues This is a multi-part message in MIME format. --------------050400000709060609080507 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Yuguiです。 頂いた判断をもとにざっと実装してみました。 On 12/25/08 2:23 AM, Masatoshi SEKI wrote: > znzさんの日記 (http://znz.s1.xrea.com/t/?date=20080108) で知ったのですが、 > evalもmagic commentを解釈するのですね。 すっかり忘れてましたが、そうですね。そして、evalは渡された文字列のエン コーディングよりmagic commentを優先するので、適当にmagic commentが付いた 文字列を生成できればeval結果はmagic commentで解釈されるわけです。 で、 > うーむ。ERB.resultはどうしたものか。ERBもerbもmagic commentを同様に処理する > べきならERBに渡されたスクリプトの最初のコメントをevalするRubyスクリプトに > 残してあげれば動きそうな気がする。 magic commentを付加するコードは実は既に成瀬さんが追加してくださっていた のでした。 で、全部合わせて添付のパッチのようになりました。どうでしょうか。 <%# -*- coding: ENCODING-NAME -*-%> 冒頭のを解釈します。 -- Yugui http://yugui.jp 私は私をDumpする --------------050400000709060609080507 Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0"; name="erb-m17n.diff" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="erb-m17n.diff" ZGlmZiAtLWdpdCBhL2Jpbi9lcmIgYi9iaW4vZXJiCmluZGV4IDg1NDE0MzcuLjg1MjU3NDkg MTAwNzU1Ci0tLSBhL2Jpbi9lcmIKKysrIGIvYmluL2VyYgpAQCAtNzIsNiArNzIsMTEgQEAg Y2xhc3MgRVJCCiAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgIHJhaXNlICJpbnZhbGlk IHRyaW0gbW9kZSAje2FyZy5kdW1wfSIgdW5sZXNzIGFyZyA9fiAvXlswLTJdJC8KICAgICAg ICAgICAgIHRyaW1fbW9kZSA9IGFyZy50b19pCisgICAgICAgICAgd2hlbiAnLUUnCisgICAg ICAgICAgICBhcmcgPSBBUkdWLnJlcV9hcmcKKyAgICAgICAgICAgIHNldF9lbmNvZGluZygq YXJnLnNwbGl0KC86LywgMikpCisgICAgICAgICAgd2hlbiAnLVUnCisgICAgICAgICAgICBz ZXRfZW5jb2RpbmcoRW5jb2Rpbmc6OlVURl84LCBFbmNvZGluZzo6VVRGXzgpCiAgICAgICAg ICAgd2hlbiAnLVAnCiAgICAgICAgICAgICBkaXNhYmxlX3BlcmNlbnQgPSB0cnVlCiAgICAg ICAgICAgd2hlbiAnLS1oZWxwJwpAQCAtOTEsMTIgKzk2LDE1IEBAIGNsYXNzIEVSQgogICAt ZCAgICAgICAgICAgICAgIHNldCAkREVCVUcgdG8gdHJ1ZQogICAtciBbbGlicmFyeV0gICAg IGxvYWQgYSBsaWJyYXJ5CiAgIC1TIFtzYWZlX2xldmVsXSAgc2V0ICRTQUZFICgwLi40KQor ICAtRSBleFs6aW5dICAgICAgIHNldCBkZWZhdWx0IGV4dGVybmFsL2ludGVybmFsIGVuY29k aW5ncworICAtVSAgICAgICAgICAgICAgIHNldCBkZWZhdWx0IGVuY29kaW5nIHRvIFVURi04 LgogICAtVCBbdHJpbV9tb2RlXSAgIHNwZWNpZnkgdHJpbV9tb2RlICgwLi4yLCAtKQogICAt UCAgICAgICAgICAgICAgIGlnbm9yZSBsaW5lcyB3aGljaCBzdGFydCB3aXRoICIlIgogRU9V CiAgICAgICAgIGV4aXQgMQogICAgICAgZW5kCiAKKyAgICAgICQ8LnNldF9lbmNvZGluZyhF bmNvZGluZzo6QVNDSUlfOEJJVCwgbmlsKQogICAgICAgc3JjID0gJDwucmVhZAogICAgICAg ZmlsZW5hbWUgPSAkRklMRU5BTUUKICAgICAgIGV4aXQgMiB1bmxlc3Mgc3JjCkBAIC0xMDUs MTAgKzExMyw4IEBAIEVPVQogICAgICAgZXJiLmZpbGVuYW1lID0gZmlsZW5hbWUKICAgICAg IGlmIG91dHB1dAogICAgICAgICBpZiBudW1iZXIKLSAgICAgICAgICBsID0gMQotICAgICAg ICAgIGZvciBsaW5lIGluIGVyYi5zcmMKLSAgICAgICAgICAgIHB1dHMgIiUzZCAlcyIlW2ws IGxpbmVdCi0gICAgICAgICAgICBsICs9IDEKKyAgICAgICAgICBlcmIuc3JjLmVhY2hfbGlu ZS53aXRoX2luZGV4IGRvIHxsaW5lLCBsfAorICAgICAgICAgICAgcHV0cyAiJTNkICVzIiVb bCsxLCBsaW5lXQogICAgICAgICAgIGVuZAogICAgICAgICBlbHNlCiAgICAgICAgICAgcHV0 cyBlcmIuc3JjCkBAIC0xMTgsNiArMTI0LDE5IEBAIEVPVQogICAgICAgZW5kCiAgICAgZW5k CiAgICAgbW9kdWxlX2Z1bmN0aW9uIDpydW4KKworICAgIGRlZiBzZXRfZW5jb2RpbmcoZXh0 ZXJuLCBpbnRlcm4gPSBuaWwpCisgICAgICB2ZXJib3NlLCAkVkVSQk9TRSA9ICRWRVJCT1NF LCBuaWwKKyAgICAgIEVuY29kaW5nLmRlZmF1bHRfZXh0ZXJuYWwgPSBleHRlcm4gdW5sZXNz IGV4dGVybi5uaWw/IHx8IGV4dGVybi5lbXB0eT8KKyAgICAgIEVuY29kaW5nLmRlZmF1bHRf aW50ZXJuYWwgPSBpbnRlcm4gdW5sZXNzIGludGVybi5uaWw/IHx8IGludGVybi5lbXB0eT8K KyAgICAgIFskc3RkaW4sICRzdGRvdXQsICRzdGRlcnJdLmVhY2ggZG8gfGlvfAorICAgICAg ICBpby5zZXRfZW5jb2RpbmcoZXh0ZXJuLCBpbnRlcm4pCisgICAgICBlbmQKKyAgICBlbnN1 cmUKKyAgICAgICRWRVJCT1NFID0gdmVyYm9zZQorICAgIGVuZAorICAgIG1vZHVsZV9mdW5j dGlvbiA6c2V0X2VuY29kaW5nCisgICAgY2xhc3MgPDwgc2VsZjsgcHJpdmF0ZSA6c2V0X2Vu Y29kaW5nOyBlbmQKICAgZW5kCiBlbmQKIApkaWZmIC0tZ2l0IGEvbGliL2VyYi5yYiBiL2xp Yi9lcmIucmIKaW5kZXggYzg3OTk0MS4uMDA2ZGU2MyAxMDA2NDQKLS0tIGEvbGliL2VyYi5y YgorKysgYi9saWIvZXJiLnJiCkBAIC01OCw2ICs1OCwyNCBAQAogIwogIyBTZWUgdGhlIEVS Qi5uZXcgYW5kIEVSQiNyZXN1bHQgbWV0aG9kcyBmb3IgbW9yZSBkZXRhaWwuCiAjCisjID09 IENoYXJhY3RlciBlbmNvZGluZ3MKKyMKKyMgRVJCIChvciBydWJ5IGNvZGUgZ2VuZXJhdGVk IGJ5IEVSQikgcmV0dXJucyBhIHN0cmluZyBpbiB0aGUgc2FtZQorIyBjaGFyYWN0ZXIgZW5j b2RpbmcgYXMgdGhlIGlucHV0IHN0cmluZy4gIFdoZW4gdGhlIGlucHV0IHN0cmluZyBoYXMK KyMgYSBtYWdpYyBjb21tZW50LCBob3dldmVyLCBpdCByZXR1cm5zIGEgc3RyaW5nIGluIHRo ZSBlbmNvZGluZyBzcGVjaWZpZWQKKyMgYnkgdGhlIG1hZ2ljIGNvbW1lbnQuCisjCisjICAg IyAtKi0gY29kaW5nOiBVVEYtOCAtKi0KKyMgICByZXF1aXJlICdlcmInCisjCisjICAgdGVt cGxhdGUgPSBFUkIubmV3IDw8RU9GCisjICAgPCUjLSotIGNvZGluZzogQmlnNSAtKi0lPgor IyAgICAgXF9cX0VOQ09ESU5HXF9cXyBpcyA8JT0gXF9cX0VOQ09ESU5HXF9cXyAlPi4KKyMg ICBFT0YKKyMgICBwdXRzIHRlbXBsYXRlLnJlc3VsdAorIworIyA8ZW0+UHJpbnRzOjwvZW0+ IFxfXF9FTkNPRElOR1xfXF8gaXMgQmlnNS4KKyMKICMKICMgPT0gRXhhbXBsZXMKICMKQEAg LTUxNywxMCArNTM1LDEzIEBAIGNsYXNzIEVSQgogICAgIGVuZAogCiAgICAgZGVmIGNvbXBp bGUocykKLSAgICAgIG91dCA9IEJ1ZmZlci5uZXcoc2VsZiwgcy5lbmNvZGluZykKKyAgICAg IGVuYyA9IHMuZW5jb2RpbmcKKyAgICAgIHMgPSBzLmR1cC5mb3JjZV9lbmNvZGluZyhFbmNv ZGluZzo6QVNDSUlfOEJJVCkKKyAgICAgIGVuYyA9IGRldGVjdF9tYWdpY19jb21tZW50KHMp IHx8IGVuYworICAgICAgb3V0ID0gQnVmZmVyLm5ldyhzZWxmLCBlbmMpCiAKICAgICAgIGNv bnRlbnQgPSAnJwotICAgICAgc2Nhbm5lciA9IG1ha2Vfc2Nhbm5lcihzLmR1cC5mb3JjZV9l bmNvZGluZygiQVNDSUktOEJJVCIpKQorICAgICAgc2Nhbm5lciA9IG1ha2Vfc2Nhbm5lcihz KSAKICAgICAgIHNjYW5uZXIuc2NhbiBkbyB8dG9rZW58CiAJaWYgc2Nhbm5lci5zdGFnLm5p bD8KIAkgIGNhc2UgdG9rZW4KQEAgLTYxMyw2ICs2MzQsMTggQEAgY2xhc3MgRVJCCiAgICAg ZW5kCiAgICAgYXR0cl9yZWFkZXIgOnBlcmNlbnQsIDp0cmltX21vZGUKICAgICBhdHRyX2Fj Y2Vzc29yIDpwdXRfY21kLCA6aW5zZXJ0X2NtZCwgOnByZV9jbWQsIDpwb3N0X2NtZAorCisg ICAgcHJpdmF0ZQorICAgIGRlZiBkZXRlY3RfbWFnaWNfY29tbWVudChzKQorICAgICAgaWYg L1xBPCUjKC4qKSU+LyA9fiBzIG9yIChAcGVyY2VudCBhbmQgL1xBJSMoLiopLyA9fiBzKQor CWNvbW1lbnQgPSAkMQorCWNvbW1lbnQgPSAkMSBpZiBjb21tZW50Wy8tXCotXHMqKC4qPylc cyotKi0kL10KKwlpZiAlciJjb2RpbmdccypbPTpdXHMqKFtbOmFsbnVtOl1cLV9dKykiID1+ IGNvbW1lbnQKKwkgIGVuYyA9ICQxLnN1YigvLSg/Om1hY3xkb3N8dW5peCkvaSwgJycpCisJ ICBlbmMgPSBFbmNvZGluZy5maW5kKGVuYykKKwllbmQKKyAgICAgIGVuZAorICAgIGVuZAog ICBlbmQKIGVuZAogCg== --------------050400000709060609080507--