JavaScript で Migemo ぽいものを書こうとしたこととか。

JavaScriptMigemo っぽいものを書こうと思い、*1一直線にコードを書いていったところ、グループ化の部分でハマった。join(')|(') *2でくっつけるだけじゃうまくいかないことに気づいたところで手が止まった。Treeとか作るべきか、これは。

冷静になって大まかな部分からでなく細かい部分から書いてみるかと思って書いたのが↑の「半角英数字記号類を全角英数字に変換」の部分。ここにメモしとくと「誰かのツッコミが得られるかもしれない」、「ある日必要になったときに引っ張りだせるかもしれない」と思ったのでメモした。色々書くとこだし、ね。

正直、どちらの展開も「まずない」と思うが。

*1: XUL/Migemo が既にありますけど

*2:この文字の並びがいろんなものに見えるとか見えないとか

半角英数字記号類を全角英数字記号類に変換

function h2z(han) {  // 半角英数字記号類を全角英数字記号類に変換
  // ASCII の 文字類 => 全角のそれら ( SP が含まれていないことに注意 )
  // [\u0021-\u007e] => [\uff01-\uff5e] 
  return han.replace(/[\u0021-\u007e]/g, function(c) {
    return String.fromCharCode(c.charCodeAt(0) + 0xff01 - 0x0021);
  });
}

とりあえず書いてみたのですが、これでいいのかな。教えてえらい人。

r2z はなんかおかしいと思ったので、 h2z に直してみた。roma も han にしてみた。

JavaScript メモ

  • プロパティも配列も連想配列
  • 関数がオブジェクト?
  • new したら prototype を自動で参照してくれる?
// 以下、コードもどきのメモ

// 連想配列の書き方
var hash = {a:'afx', 'b':'bcc'};  // => じゃない, key の " ' は省略できる?
hash['c'] = 'clnch';

// プロパティも配列も連想配列
var arr = new Array;  // [] でも同じ?
arr[0] = 'a';    // ↓と同じ ( 0 に .ToString() がかかる? )
arr['0'] = 'a';  // ↑と同じ
arr['a'] = 'afx';  // ↓と同じ
arr.a = 'afx';     // ↑と同じ

// 関数がオブジェクト?
var Klass = function() {}  // ↓と同じ?(スコープとかが違いそう。 new はこれでもできるぽい)
function Klass() {}        // ↑と同じ?

// new したら prototype を自動で参照してくれる?
Klass.prototype = {a:'afx', b:function(){return '飛べない豚はなんとかかんとか'}};  // これも連想配列

Klass.a // undefined (この状態じゃ prototype は見てくれない )

var obj = new Klass;
obj.a  // 'afx'
obj.b()  // '飛べない豚はなんとかかんとか'

// で、どうして prototype があるのか理解していなかったり。