tokuhirom's Blog

visualwidth.js とかかいた

https://github.com/tokuhirom/visualwidth-js/blob/master/visualwidth.js
だいぶ適当だけど。VisualWidth.width() とか VisualWidth.truncate() とかできるかんじ

VisualWidth.width() というのは、見た目上の幅をかえすという関数。
VisualWidth.truncate(str, len, '...') は、なんとなくその幅におさまるように truncate するという関数。

なんか適当でいいやーとおもってサロゲートペアとかしったことかー。ってかんじの実装にしてあるけど日本語だとなんとなくうごきます。判定ロジックが超適当だけど、まあなんとなくうごきます。

要は日本でまともにつかわれるサロゲートペアの領域は基本的に full-width なので、これを half-width と判定してやることにより half-width + half-width = 2 width にしてやって、なんかうまくいってる風にしています。

ちゃんとした実装をすればいいとおもうんですけど、これぐらいの規模感の実装、ライセンスが明確なやつがみあたらなかったので自前で適当にやっつけた。だれかいい実装を添削してくれるとうれしい。あるいは高速にするとか。いまの実装、相当素朴。