マスタリング バベル

39
Boost.勉強会 #2 ( 2010-09-11 )

Upload: -

Post on 19-Jul-2015

868 views

Category:

Technology


0 download

TRANSCRIPT

Boost.勉強会 #2 ( 2010-09-11 )

バベルってなに?

使い方

オプション

今後の課題

2

マスタリングバベル

3

文字エンコーディング変換モジュールです!

4

文字エンコーディング変換モジュールです!

シフトJIS,JIS,EUC,UNICODE(UTF-8,UTF-16,UTF-32)に対応していずれの組み合わせであろうと相互変換できます。

5

文字エンコーディング変換モジュールです!

シフトJIS,JIS,EUC,UNICODE(UTF-8,UTF-16,UTF-32)に対応していずれの組み合わせであろうと相互変換できます。

×国際化対応の為のものではありません!

国際化対応を前提とする場合、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 します。

23

#include "babel.h"

最初に初期化関数を呼び出します。

24

int main(...) {...babel::init_babel();...

}

文字エンコーディング変換関数を呼び出します。

25

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

あとは babel.cpp も他のソースコードと一緒にコンパイル・リンクもするだけ。

※具体的な方法はご使用のIDEやmakeなどの環境次第ですのでここでは説明しません。

26

ストリーム

27

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());…

}

マスタリングバベル

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

マスタリングバベル