ウクレレ記法をはてな以外で使う

ウクレレ記法ってステキですよね。
簡単にコードダイアグラムが書けちゃう。はてな民大勝利!


だけど、「ウクレレ記法を使いたい…!でも、はてな民じゃないし。。。」という人のために、はてな以外でもウクレレ記法を使えるようにjavascriptを書いてみました。

(function (w) {
  var u = "<img src=\"http://hatena.g.hatena.ne.jp/",
    c = "images/ukulele/$1.png\" alt=\"$0\" />",
    d = "ukulele?chord=$1&flets=$2\" alt=\"$0\" />", 
    m = "|:|1234-_()", l = {
    "|:" : "repeat_start", ":|" : "repeat_end", "1" : "repeat_1",
    "2" : "repeat_2", "3" : "repeat_3", "4" : "repeat_4",
    "-" : "repeat_last", "_" : "space", "(" : "left_bracket",
    ")" : "right_bracket"};
  (function (f) {
    if (typeof w.addEventListener == 'function') {
      w.addEventListener('load', f, false);
      return true
    }
    else if (typeof w.attachEvent == 'object') {
      w.attachEvent('onload', f);
      return true
    }
    var o = w.onload;
    if (typeof w.onload != 'function') {
      w.onload = f;
    }
    else {
      w.onload = function () {
        o();f();
      }
    }
  })(function () {
    var b = document.body.innerHTML, r = b.match(/\[uke:(.*?)\]/g);
    for (var i = 0; i < r.length; i++) {
      var a = r[i].slice(5, - 1).split(" "), n = "";
      for (var j = 0; j < a.length; j++) {
        if (a[j].length == 0) {
          continue
        }
        n += u;
        if (-1 != m.indexOf(a[j])) {
          n += c.replace(/\$[01]/g, l[a[j]])
        }
        else {
          var s = a[j].replace("#", "%23");
          if (-1 != s.indexOf("@")) {
            var f = s.split("@");
            n += d.replace("$0", a[j]).replace("$1", f[0]).replace("$2", f[1])
          }
          else {
            n += c.replace("$0", a[j]).replace("$1", s)
          }
        }
      }
      b = b.replace(r[i], "<p>" + n + "</p>")
    }
    document.body.innerHTML = b;
  })
})(window);

要は、[uke: 〜]を見つけたらゴリゴリっと置換しちゃえばいいじゃない、という発想。
ご覧の通り、[uke:tp]には対応してません。。。
性能も特に考えてません。
そんなんでも良かったら使って下さいな。


ご指摘お待ちしてます><