tokuhirom's Blog

10分でかける! node.js で対話的なプログラムを書く方法。

https://github.com/tokuhirom/utf728

UTF-8 から UTF-7 への変換をおこなう対話的なシェルをつくりたい、などのように単機能の対話的なシェルをつくりたいというケースはままあるかとおもいます。
そんな場合には readline というモジュールが組込まれているので、それをつかえばいいです。

具体的には以下のように書けば OK です。簡単ですね。

var Iconv = require('iconv').Iconv,
    rl = require('readline'),
    util = require('util'),
    undefined;

function MyApp() {
    this.utf827 = new Iconv('UTF-8', 'UTF-7');
    this.utf728 = new Iconv('UTF-7', 'UTF-8');
}
MyApp.prototype = {
    run: function () {
        var self = this;

        var rli = rl.createInterface(process.stdin, process.stdout);

        rli.setPrompt('utf7> ');

        rli.on('line', function(cmd) {
            var e = self.convert(cmd);
            util.puts(e);

            rli.prompt();
        }).on('close', function () {
            util.puts('');
            process.stdin.destroy();
        });

        rli.prompt();
    },
    convert: function (str) {
        if (str.match(/^\+/)) {
            return this.utf728.convert(str);
        } else {
            return this.utf827.convert(str);
        }
    }
};

(new MyApp()).run();