LoginSignup
17
12

More than 5 years have passed since last update.

ICUの使用用途

Posted at

ICUとは

ICUはInternational Components for Unicodeの略で、その名の通りUnicodeに関するあれこれを扱ってくれるライブラリです。
TATEditorで利用しているICUの機能はざっと以下の通りです。

  • 正規表現検索 (regular expressions)
    • Unicode的にはUTS#18の実装になります
      • Level 1とLevel 2の一部を実装している
    • 使う場合はこちら側のテキストをUTF-16で持っておくと便利
      • UTextを実装すればかなり自由度の高い文字列クラスを使えます
  • 曖昧検索 (collation)
    • 使う場合はこちら側のテキストをUTF-16で持っておくと便利
      • UCharIteratorを実装すればかなり自由度の高い文字列クラスを使えます
  • 文字種の変換
    • Hiragana to Latin, Any to Upper, Any to NFCなどの変換ができます
  • 文字列境界の解析
    • 改行可能な位置の取得
      • Unicode的にはUAX#14の実装
      • TATEditorでは折り返し改行を行う場所の探索に利用しています
    • 単語の区切りの取得
      • Unicode的にはUAX#29 (Word Boundaries)の実装
      • TATEditorではダブルクリック時の選択範囲の決定に利用しています
    • 文章の区切りの取得
      • Unicode的にはUAX#29 (Sentence Boundaries)の実装
      • TATEditorではトリプルクリック時の選択範囲の決定に利用しています
  • Unicode情報の取得
    • Unicodeの種々の値を取得できます
    • TATEditorでは文字のUnicode名を表示する際に使っています
      • ステータスバーのコードポイントを右クリックすると出る
  • 文字コード検出
    • 実装はメジャーな文字コード全てに対して評価関数(バイナリ ↦ [0,100])を設計し、その評価値の最も高いものを選ぶというもの
    • それなりの精度
  • 文字コード変換
    • UTF-16 ⇄ 各種文字コードの変換ができる
    • 変換元/変換先の文字コード名を知っている必要がある
      • 一覧はここで見られます
  • 日付/時刻の文字列化
    • 時刻を各Localeの表記に変換するものです
    • 昔はWindows 7以前で日本のタイムゾーンの取得に失敗して韓国標準時になったりしてた
    • TATEditorでは現在時刻の挿入などに使っています
      • F5キーで挿入できる

他にもBiDiのAPIやレイアウトエンジンがあります。
BiDiはアラビア語などに対応する際にお世話になるかなと思ってます。

ICUのビルド

  • Windows
    • Visual Studioのソリューションファイルをビルドすれば完成です
    • スタティックライブラリのビルドはちょっと骨が折れます
      • (適切な手順を書く時間がなかった)
  • Ubuntu
  • macOS
    • 適切な引数で./runConfigureICUすればいい感じになる
    • macOSでUniversalバイナリを作るならlipoしましょう
  • iOS
  • Android

ICUのサンプルコード(NULL

時間が足りませんでした><。

おわりに

ICUはUnicodeの仕様を実装する手間を省く際には非常に便利なライブラリでした。
本当は「ICUの使い方」というタイトルだったのですが、使い方(サンプルコード)に手がつかなかったので変更しました。

明日はwxWidgetsのことを書きます。

17
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
12