2011-11-29

ウェブサイトに書いてあるコードポイントの指す文字をさっと調べたい

何日か前に
ラテン語のアルファベット U+00D8,U+00F8 と空集合 U+2205 と直径記号 U+2300 の区別のつかないフォントもありますねぇ
なんてことをつぶやいたのですが、私はこういうコードポイントが指すものがなにかを調べるのに例えば Unicode Character Search を使っています。
で、まあいちいちそこから検索するのも面倒なので、U+XXXX みたいにして書かれたコードポイントが自動的にリンクになったら便利じゃないの、というわけでこういうスクリプトを書いてみました:
(function (window) {
  var tags = ['p','span','pre','div','blockquote','q',
    'li','dd','dt','td','th','h1','h2','h3','h4','h5'];
  var re_tags = new RegExp(tags.join('|'), 'i');
  var is_tag = function (node) {
      return node.nodeName.match(re_tags);
  };
  var traverse = function (trav, node) {
      for (var i = 0; i < node.childNodes.length; ++i) {
          trav(trav, node.childNodes[i]);
      }
      if (is_tag(node) && node.childNodes.length == 1) {
          if (node.childNodes[0].nodeName == '#text') {
              var str = node.childNodes[0].nodeValue.replace(
                  /U\+([0-9A-Fa-f]{4})/g,
                  function (s, p1) {
                      return '<'+'a href="http://www.fileformat.info/info/unicode/char/'
                        + p1.toLowerCase() +'/index.htm">' + s + '</a>';
                  }
              );
              node.innerHTML = str;
          }
      }
  };
  traverse(traverse, window.document.body);
})(window);
Greasemonkey から使えます。基本多言語面だけでいいよね、ということで /U\+([0-9A-Fa-f]{4})/ とか荒っぽいことをしてます。

0 件のコメント:

コメントを投稿