FineKernelToolKit
2.8.10
|
00001 /**************************************************************************** 00002 * 00003 * Copyright (c) 1999-2011, Fine Kernel Project, All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, 00006 * with or without modification, are permitted provided that the 00007 * following conditions are met: 00008 * 00009 * - Redistributions of source code must retain the above 00010 * copyright notice, this list of conditions and the 00011 * following disclaimer. 00012 * 00013 * - Redistributions in binary form must reproduce the above 00014 * copyright notice, this list of conditions and the 00015 * following disclaimer in the documentation and/or 00016 * other materials provided with the distribution. 00017 * 00018 * - Neither the name of the copyright holders nor the names 00019 * of its contributors may be used to endorse or promote 00020 * products derived from this software without specific 00021 * prior written permission. 00022 * 00023 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00024 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00025 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 00026 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 00027 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 00028 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00029 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 00030 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00031 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 00032 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 00033 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00034 * POSSIBILITY OF SUCH DAMAGE. 00035 * 00036 ****************************************************************************/ 00037 /**************************************************************************** 00038 * 00039 * Copyright (c) 1999-2011, Fine Kernel Project, All rights reserved. 00040 * 00041 * 本ソフトウェアおよびソースコードのライセンスは、基本的に 00042 * 「修正 BSD ライセンス」に従います。以下にその詳細を記します。 00043 * 00044 * ソースコード形式かバイナリ形式か、変更するかしないかを問わず、 00045 * 以下の条件を満たす場合に限り、再頒布および使用が許可されます。 00046 * 00047 * - ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、 00048 * および下記免責条項を含めること。 00049 * 00050 * - バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の 00051 * 資料に、上記の著作権表示、本条件一覧、および下記免責条項を 00052 * 含めること。 00053 * 00054 * - 書面による特別の許可なしに、本ソフトウェアから派生した製品の 00055 * 宣伝または販売促進に、本ソフトウェアの著作権者の名前または 00056 * コントリビューターの名前を使用してはならない。 00057 * 00058 * 本ソフトウェアは、著作権者およびコントリビューターによって「現 00059 * 状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、 00060 * および特定の目的に対する適合性に関す暗黙の保証も含め、またそれ 00061 * に限定されない、いかなる保証もないものとします。著作権者もコン 00062 * トリビューターも、事由のいかんを問わず、損害発生の原因いかんを 00063 * 問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その 00064 * 他の)不法行為であるかを問わず、仮にそのような損害が発生する可 00065 * 能性を知らされていたとしても、本ソフトウェアの使用によって発生 00066 * した(代替品または代用サービスの調達、使用の喪失、データの喪失、 00067 * 利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、 00068 * 間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害に 00069 * ついて、一切責任を負わないものとします。 00070 * 00071 ****************************************************************************/ 00072 #ifndef __FK_UNICODE_HEADER__ 00073 #define __FK_UNICODE_HEADER__ 00074 00075 #include <vector> 00076 #include <FK/Base.h> 00077 00078 class ImdKanjiCodeConverter; 00079 class ImdKcvEncoder; 00080 00082 enum fk_StringCode { 00083 FK_STR_UTF16, 00084 FK_STR_UTF8, 00085 FK_STR_JIS, 00086 FK_STR_SJIS, 00087 FK_STR_EUC 00088 }; 00089 00091 00103 class fk_UniChar : public fk_BaseObject { 00104 private: 00105 int code; 00106 00107 public: 00109 00115 fk_UniChar(int code = 0); 00116 00118 fk_UniChar(const fk_UniChar &); 00119 00121 fk_UniChar & operator =(const fk_UniChar &); 00122 00124 00132 bool readFile(FILE *fp); 00133 00135 00141 void setBuffer(unsigned char c1, unsigned char c2); 00142 00144 00149 void setCode(int code); 00150 00152 00157 int getCode(void); 00158 00160 00166 bool isAscii(void); 00167 00169 00177 char getAscii(void); 00178 }; 00179 00181 00195 class fk_UniStr : public fk_BaseObject { 00196 private: 00197 std::vector<int> uniStr; 00198 int mark; 00199 00200 bool fgetLine_UTF16(FILE *); 00201 00202 public: 00204 fk_UniStr(void); 00205 00207 virtual ~fk_UniStr(); 00208 00210 fk_UniStr(const fk_UniStr &); 00211 00213 fk_UniStr & operator =(const fk_UniStr &); 00214 00216 00219 void clear(void); 00220 00222 00228 int getLength(void) const; 00229 00231 00252 bool getLine(fk_UniStr *str); 00253 00255 00263 void markClear(void); 00264 00266 00291 bool fgetLine(FILE *fp, fk_StringCode code = FK_STR_UTF16); 00292 00294 00309 bool readFile(const std::string fileName, 00310 fk_StringCode code = FK_STR_UTF16); 00311 00313 00321 void copyStr(fk_UniStr *str); 00322 00324 00344 void convert(const std::string &str, fk_StringCode code); 00345 00347 00371 void printf(fk_StringCode code, const char *format, ...); 00372 00374 00383 int getCode(int num) const; 00384 00386 00402 int find(int start, int code); 00403 00405 00421 int find(int start, unsigned char c1, unsigned char c2); 00422 00424 00427 void pop_back(void); 00428 00430 00437 void push_back(fk_UniChar c); 00438 00440 00449 void push_back(fk_UniChar *c); 00450 00452 00459 void push_back(int code); 00460 00461 #ifndef FK_DOXYGEN_USER_PROCESS 00462 void Print(std::string = ""); 00463 #endif 00464 }; 00465 00467 00489 class fk_StrConverter { 00490 private: 00491 ImdKanjiCodeConverter *jis_utf8_Base; 00492 ImdKanjiCodeConverter *sjis_utf8_Base; 00493 ImdKanjiCodeConverter *euc_utf8_Base; 00494 ImdKanjiCodeConverter *utf16_utf8_Base; 00495 00496 ImdKanjiCodeConverter *jis_utf16_Base; 00497 ImdKanjiCodeConverter *sjis_utf16_Base; 00498 ImdKanjiCodeConverter *euc_utf16_Base; 00499 ImdKanjiCodeConverter *utf8_utf16_Base; 00500 00501 ImdKanjiCodeConverter *jis_sjis_Base; 00502 ImdKanjiCodeConverter *euc_sjis_Base; 00503 ImdKanjiCodeConverter *utf8_sjis_Base; 00504 ImdKanjiCodeConverter *utf16_sjis_Base; 00505 00506 char *buffer; 00507 int bufSize; 00508 00509 ImdKcvEncoder * MakeEncoder(fk_StringCode); 00510 void RemakeBuffer(ImdKanjiCodeConverter *); 00511 00512 void InitJIS_UTF8_Base(void); 00513 void InitSJIS_UTF8_Base(void); 00514 void InitEUC_UTF8_Base(void); 00515 void InitUTF16_UTF8_Base(void); 00516 00517 void InitJIS_UTF16_Base(void); 00518 void InitSJIS_UTF16_Base(void); 00519 void InitEUC_UTF16_Base(void); 00520 void InitUTF8_UTF16_Base(void); 00521 00522 void InitJIS_SJIS_Base(void); 00523 void InitEUC_SJIS_Base(void); 00524 void InitUTF8_SJIS_Base(void); 00525 void InitUTF16_SJIS_Base(void); 00526 00527 void ConvertJIS_UTF8(const std::string &, 00528 std::string *); 00529 void ConvertSJIS_UTF8(const std::string &, 00530 std::string *); 00531 void ConvertEUC_UTF8(const std::string &, 00532 std::string *); 00533 void ConvertUTF16_UTF8(const std::string &, 00534 std::string *); 00535 00536 void ConvertJIS_SJIS(const std::string &, 00537 std::string *); 00538 void ConvertEUC_SJIS(const std::string &, 00539 std::string *); 00540 void ConvertUTF8_SJIS(const std::string &, 00541 std::string *); 00542 void ConvertUTF16_SJIS(const std::string &, 00543 std::string *); 00544 00545 void CommonConvert(ImdKanjiCodeConverter *, 00546 const std::string &, fk_UniStr *); 00547 00548 public: 00550 fk_StrConverter(void); 00552 virtual ~fk_StrConverter(); 00553 00555 00561 void convertJIS(const std::string &str, fk_UniStr *uniStr); 00562 00564 00570 void convertSJIS(const std::string &str, fk_UniStr *uniStr); 00571 00573 00579 void convertEUC(const std::string &str, fk_UniStr *uniStr); 00580 00581 #ifndef FK_DOXYGEN_USER_PROCESS 00582 void convert_SJIS(const std::string &, 00583 std::string *, 00584 fk_StringCode); 00585 00586 void convert_UTF8(const std::string &, 00587 std::string *, 00588 fk_StringCode); 00589 #endif 00590 00591 }; 00592 00593 namespace fk_Code { 00594 void setInputCoding(fk_StringCode); 00595 00596 char * utf8(const std::string &); 00597 char * utf8(const std::string &, fk_StringCode); 00598 char * sjis(const std::string &); 00599 char * sjis(const std::string &, fk_StringCode); 00600 } 00601 00602 #endif // !__FK_UNICODE_HEADER__