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 マスタリング バベル
© Copyright 2024 ExpyDoc