発表資料 ( 版 )

Boost.勉強会 #2 ( 2010-09-11 )




バベルってなに?
使い方
オプション
今後の課題
2
マスタリング バベル
3

文字エンコーディング変換モジュールです!
4

文字エンコーディング変換モジュールです!

シフトJIS,JIS,EUC,UNICODE(UTF-8,UTF-16,UTF32)に対応していずれの組み合わせであろうと相互変
換できます。
5

文字エンコーディング変換モジュールです!


シフトJIS,JIS,EUC,UNICODE(UTF-8,UTF-16,UTF32)に対応していずれの組み合わせであろうと相互変
換できます。
×国際化対応の為のものではありません!
 国際化対応を前提とする場合、MLang, iconv, ICU あ
たりを推奨します。
6

真にフリーなライセンス
7

真にフリーなライセンス

GPLみたいにうだうだ言いません!
8

真にフリーなライセンス

GPLみたいにうだうだ言いません!

商用だろうが断りなく好き勝手に使って構いませ
ん!
9

真にフリーなライセンス

GPLみたいにうだうだ言いません!

商用だろうが断りなく好き勝手に使って構いませ
ん!

オープンソースソフトウェアの一部としてソース
ファイル毎再配布しても構いません!
10

強いて制限を挙げるなら…
11

強いて制限を挙げるなら…

「バベルはワシが作った」とか言い出さないで。
 第三者から俺が盗人呼ばわりされるのはさすがに勘
弁!
12

強いて制限を挙げるなら…

「バベルはワシが作った」とか言い出さないで。
 第三者から俺が盗人呼ばわりされるのはさすがに勘
弁!

万が一なにか問題があっても「自己責任」で。
 俺に責任追及されてもそんなの知らん!
13

高い文字エンコーディング判別精度
14

高い文字エンコーディング判別精度

日本語限定だし、日本語文中に含まれる文字コード
の出現率データを使っているので非常に高い文字エ
ンコーディング判別精度を誇ります!
15

高い移植性
16

高い移植性

あの AIX 上ですらちゃんと動きます!
 ※ここ苦笑する所
17

利用実績
18

利用実績

具体的な数は残念ながらろくに把握できていません
が、フリーなライセンス、文字エンコーディング判
別精度、高い移植性なんかのおかげで、かなり規模
でご採用頂けているようです。
19
マスタリング バベル
20

まずバベルをここからダウンロードします!


http://tricklib.com/cxx/ex/babel/#download
※一番下の[バベル全ファイルZIPパック]がオススメ
21

次にダウンロードした各ファイルをバベルを利
用するプログラムのソースファイルを置いてい
るディレクトリにコピーします。

※babel.h と babel.cpp だけでなく*.csv, *.dat も同じ
ディレクトリに一緒にコピーしてください。
22

babel.h を #include します。
#include "babel.h"
23

最初に初期化関数を呼び出します。
int main(...) {
...
babel::init_babel();
...
}
24

文字エンコーディング変換関数を呼び出します。
void f()
{
std::string source, destination;
...
// 全自動変換
destination = babel::auto_translate<>(source);
...
// ShiftJIS→EUC変換
destination = babel::sjis_to_euc(source);
}
変換関数の一覧: http://tricklib.com/cxx/ex/babel/#functions
25

あとは babel.cpp も他のソースコードと一緒に
コンパイル・リンクもするだけ。

※具体的な方法はご使用のIDEやmakeなどの環境次
第ですのでここでは説明しません。
26

ストリーム
using namespace babel;
void execute_translater(std::istream &input, std::ostream &output, bbl_translater<bbl_binary, bbl_binary> translater)
{
bbl_binary buffer;
bbl_binary buffer2;
while(!input.eof())
{
bbl_binary::value_type buffer3[1024];
input.read(buffer3, 1024);
unsigned int size = input.gcount();
buffer.assign(buffer3, size);
translater << buffer;
translater >> buffer2;
output << buffer2;
}
}
void f()
{
…
execute_translater(std::ifstream(“src.txt”), std::cout, auto_translate_engine<bbl_string>::create());
…
}
27
マスタリング バベル
28

大半のマクロ定義によるオプションは指定なし
でもだいたいよしなに処理しますが多少効率の
悪いコードになることもあるので面倒でなけれ
ば指定をしたほうがいいです。
29

wchar_t のサイズ



__UNICODE_CHAR_SIZE_2__
__UNICODE_CHAR_SIZE_4__
× __UNICODE_CHAR_SIZE_UNKNOWN__
30

エンディアン



__LITTLE_ENDIAN_COMPUTER__
__BIG_ENDIAN_COMPUTER__
× __UNKNOWN_ENDIAN_COMPUTER__
31

処理系(コンパイラ)の文字エンコーディング





__USING_ANSI__
__USING_SJIS__
__USING_EUC__
__USING_UTF8__
× __USING_UNKNOWN__
32

テーブルの形式

__BBL_USING_STATIC_TABLE__ ( default )
 静的なテーブルを使用し、 babel::init_babel() の処理時間も
非常に短くなります。
 コンパイラに負荷をかける為、コンパイルできないことがあ
ります。
 ※コンパイラのオプションで問題を回避できる場合もあり。

__BBL_USING_STDMAP_TABLE__
 静的なテーブルの代りに std::map を使用し、
babel::init_babel() の処理時間も長くなり、メモリ消費量も増
大します。
33

SJIS⇔UNICODE変換で使用するマッピング



__BBL_USE_UNICODE_MAP_CP932__ ( default )
__BBL_USE_UNICODE_MAP_UTC__
__BBL_USE_UNICODE_MAP_APPLE__
34

使用しないコードとデータの除去



__BBL_DISABLE_UNICODE__
__BBL_DISABLE_BINARY__
__BBL_DISABLE_UTF32__
 ※この指定だけは babel.h で始めから固定で定義されて
います。 UTF-32 の実装が必要な場合にこのマクロの
#define を babel.h から削除してください。

__BBL_DISABLE_SELECTORS__
35
マスタリング バベル
36

マクロ名から連続したアンダースコアの除去



例: __BABEL_BABEL_H__ → BABEL_BABEL_H
UTF-8 で本来無効なバイト列の無効化
絵文字対応
37
マスタリング バベル
38
マスタリング バベル