00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
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_UCS;
00080
00082 enum fk_StringCode {
00083 FK_STR_UTF16,
00084 FK_STR_JIS,
00085 FK_STR_SJIS,
00086 FK_STR_EUC
00087 };
00088
00090
00102 class fk_UniChar : public fk_BaseObject {
00103 private:
00104 int code;
00105
00106 public:
00108
00114 fk_UniChar(int code = 0);
00115
00117 fk_UniChar(const fk_UniChar &);
00118
00120 fk_UniChar & operator =(const fk_UniChar &);
00121
00123
00131 bool readFile(FILE *fp);
00132
00134
00140 void setBuffer(unsigned char c1, unsigned char c2);
00141
00143
00148 void setCode(int code);
00149
00151
00156 int getCode(void);
00157
00159
00165 bool isAscii(void);
00166
00168
00176 char getAscii(void);
00177 };
00178
00180
00194 class fk_UniStr : public fk_BaseObject {
00195 private:
00196 std::vector<int> uniStr;
00197 int mark;
00198
00199 bool fgetLine_UTF16(FILE *);
00200
00201 public:
00203 fk_UniStr(void);
00204
00206 ~fk_UniStr();
00207
00209 fk_UniStr(const fk_UniStr &);
00210
00212 fk_UniStr & operator =(const fk_UniStr &);
00213
00215
00218 void clear(void);
00219
00221
00227 int getLength(void) const;
00228
00230
00251 bool getLine(fk_UniStr *str);
00252
00254
00262 void markClear(void);
00263
00265
00290 bool fgetLine(FILE *fp, fk_StringCode code = FK_STR_UTF16);
00291
00293
00308 bool readFile(const std::string fileName,
00309 fk_StringCode code = FK_STR_UTF16);
00310
00312
00320 void copyStr(fk_UniStr *str);
00321
00323
00343 void convert(const std::string &str, fk_StringCode code);
00344
00346
00370 void printf(fk_StringCode code, const char *format, ...);
00371
00373
00382 int getCode(int num) const;
00383
00385
00401 int find(int start, int code);
00402
00404
00420 int find(int start, unsigned char c1, unsigned char c2);
00421
00423
00426 void pop_back(void);
00427
00429
00436 void push_back(fk_UniChar c);
00437
00439
00448 void push_back(fk_UniChar *c);
00449
00451
00458 void push_back(int code);
00459
00460 #ifndef FK_DOXYGEN_USER_PROCESS
00461 void Print(std::string = "");
00462 #endif
00463 };
00464
00466
00488 class fk_StrConverter {
00489 private:
00490 ImdKanjiCodeConverter *jisBase, *sjisBase, *eucBase;
00491 char *buffer;
00492 int bufSize;
00493
00494 ImdKcvEncoder_UCS * MakeEncoder(void);
00495 void RemakeBuffer(ImdKanjiCodeConverter *);
00496 void InitJISBase(void);
00497 void InitSJISBase(void);
00498 void InitEUCBase(void);
00499 void CommonConvert(ImdKanjiCodeConverter *,
00500 const std::string &, fk_UniStr *);
00501
00502 public:
00504 fk_StrConverter(void);
00506 ~fk_StrConverter();
00507
00509
00515 void convertJIS(const std::string &str, fk_UniStr *uniStr);
00516
00518
00524 void convertSJIS(const std::string &str, fk_UniStr *uniStr);
00525
00527
00533 void convertEUC(const std::string &str, fk_UniStr *uniStr);
00534 };
00535
00536 #endif // !__FK_UNICODE_HEADER__