lib/jaconv.js
function toHebon(s) {
        var hebon = '';
        var lastHebon = '';
        var lastChar = '';
        var i = 0;
        while (i < s.length) {
            var hr = getHebon(s, i);
            if (hr.c == 'っ') {
                // 'っち'
                var nextHr = getHebon(s, i + 1);
                if (nextHr.h != null) {
                    if (nextHr.h.indexOf('CH') == 0) {
                        hr.h = 'T';
                    }
                    else {
                        hr.h = nextHr.h.substring(0, 1);
                    }
                }
            }
            else if (hr.c == 'ん') {
                // B,M,P の前の 'ん' は 'M' とする。
                var nextHr = getHebon(s, i + 1);
                if (nextHr.h != null && 'BMP'.indexOf(nextHr.h.charAt(0)) != -1) {
                    hr.h = 'M';
                }
                else {
                    hr.h = 'N';
                }
            }
            else if (hr.c == 'ー') {
                // 長音は無視
                hr.h = '';
            }
            if (hr.h != null) {
                // 変換できる文字の場合
                if (lastHebon != null) {
                    // 連続する母音の除去
                    var htest = lastHebon + hr.h;
                    if (htest.length > 2) {
                        htest = htest.substring(htest.length - 2);
                    }
                    if (aaSet[htest]) {
                        hr.h = '';
                    }
                }
                hebon += hr.h;
            }
            else {
                // 変換できない文字の場合
                hebon += hr.c;
            }
            lastHebon = hr.h;
            lastChar = hr.c;
            i += hr.c.length;
        }
        return hebon;
    }
function toHebon(s) {
        var hebon = '';
        var lastHebon = '';
        var lastChar = '';
        var i = 0;
        while (i < s.length) {
            var hr = getHebon(s, i);
            if (hr.c == 'っ') {
                // 'っち'
                var nextHr = getHebon(s, i + 1);
                if (nextHr.h != null) {
                    if (nextHr.h.indexOf('CH') == 0) {
                        hr.h = 'T';
                    }
                    else {
                        hr.h = nextHr.h.substring(0, 1);
                    }
                }
            }
            else if (hr.c == 'ん') {
                // B,M,P の前の 'ん' は 'M' とする。
                var nextHr = getHebon(s, i + 1);
                if (nextHr.h != null && 'BMP'.indexOf(nextHr.h.charAt(0)) != -1) {
                    hr.h = 'M';
                }
                else {
                    hr.h = 'N';
                }
            }
            else if (hr.c == 'ー') {
                // 長音は無視
                hr.h = '';
            }
            if (hr.h != null) {
                // 変換できる文字の場合
                if (lastHebon != null) {
                    // 連続する母音の除去
                    var htest = lastHebon + hr.h;
                    if (htest.length > 2) {
                        htest = htest.substring(htest.length - 2);
                    }
                    if (aaSet[htest]) {
                        hr.h = '';
                    }
                }
                hebon += hr.h;
            }
            else {
                // 変換できない文字の場合
                hebon += hr.c;
            }
            lastHebon = hr.h;
            lastChar = hr.c;
            i += hr.c.length;
        }
        return hebon;
    }
全角ひらがなをヘボン式ローマ字で半角英文字に変換します。