OSDN Git Service

moved from CVS
[tombo/Tombo.git] / Src / TomboLib / Uniconv.h
1 #ifndef UNICONV_H\r
2 #define UNICONV_H\r
3 \r
4 // most of the methods are allocate buffer by new[], so use delete[] for free memoy. \r
5 \r
6 //////////////////////////////////\r
7 // Native <-> Unicode Conversion\r
8 //////////////////////////////////\r
9 \r
10 LPTSTR ConvSJIS2Unicode(const char *p);\r
11 char *ConvUnicode2SJIS(LPCTSTR p);\r
12 \r
13 //////////////////////////////////\r
14 // TCHAR/WCHAR version of strdup\r
15 //////////////////////////////////\r
16 // not use malloc but use new[].\r
17 \r
18 LPTSTR StringDup(LPCTSTR pStr);\r
19 LPWSTR StringDupW(LPCWSTR pStr);\r
20 char *StringDupA(const char *pStr);\r
21 \r
22 //////////////////////////////////\r
23 // Length count \r
24 //////////////////////////////////\r
25 #ifdef _WIN32_WCE\r
26 // count number of MBCS strings. return value are number of letters insted of bytes.\r
27 DWORD CountMBStrings(const char *pStr, DWORD nBytes);\r
28 \r
29 // count number of UNICODE bytes. return value are number of bytes when pStr converts to MBCS.\r
30 DWORD CountWCBytes(LPCTSTR pStr, DWORD nChar);\r
31 #endif\r
32 \r
33 //////////////////////////////////\r
34 // LPTSTR <-> LPWSTR conversion\r
35 //////////////////////////////////\r
36 // On CE platform, same as StringDup.\r
37 // On Windows platform, MBCS <-> WBCS conversion.\r
38 \r
39 LPWSTR ConvTCharToWChar(LPCTSTR p);\r
40 LPTSTR ConvWCharToTChar(LPCWSTR p);\r
41 \r
42 //////////////////////////////////\r
43 // TCHAR <-> UTF-8\r
44 //////////////////////////////////\r
45 \r
46 char *ConvTCharToUTF8(LPCTSTR p);\r
47 LPTSTR ConvUTF8ToTChar(const char *p);\r
48 \r
49 //////////////////////////////////\r
50 // UTF-8 <--> UCS2\r
51 //////////////////////////////////\r
52 \r
53 LPWSTR ConvUTF8ToUCS2(const char *pUTFData);\r
54 char *ConvUCS2ToUTF8(LPCWSTR pStr);\r
55 \r
56 DWORD ConvUTF8PosToUCSPos(const char *pUTF, DWORD nUTFPos);\r
57 DWORD ConvUCSPosToUTF8Pos(const char *pUTF, DWORD nUCSPos);\r
58 \r
59 char *EscapeXMLStr(LPCTSTR pStr);\r
60 \r
61 //////////////////////////////////\r
62 // JIS -> SJIS\r
63 //////////////////////////////////\r
64 // pOut\82Í\8dÅ\92á\82Å\82àpIn\82Æ\93¯\82\91å\82«\82³\82ð\8e\9d\82Â\95K\97v\82ª\82 \82é\81B\r
65 \r
66 void ConvJIS2SJIS(const char *pIn, char *pOut);\r
67 \r
68 //////////////////////////////////\r
69 // SJIS->JIS\r
70 //////////////////////////////////\r
71 // \97Ì\88æ\82Í\93®\93I\82É\8am\95Û\82³\82ê\82é\82½\82ß\81A\95s\97v\82É\82È\82Á\82½\8e\9e\93_\82Å delete[] \82·\82é\95K\97v\82ª\82 \82é\81B\r
72 \r
73 char *ConvSJIS2JIS(char *pStr);\r
74 \r
75 //////////////////////////////////\r
76 // \8a¿\8e\9a\95\8e\9a\97ñ\82Ìstrncp\r
77 //////////////////////////////////\r
78 // nLen\82ª\8a¿\8e\9a\82Ì2\83o\83C\83g\96Ú\82ð\90Ø\82é\8fê\8d\87\81A1\83o\83C\83g\96Ú\82à\83R\83s\81[\82µ\82È\82¢\81B\r
79 // \82»\82Ì\82½\82ß\81ASJIS\82Ì\95\8e\9a\97ñ\82Æ\82µ\82Ä\8fí\82É\97L\8cø\82È\95\8e\9a\97ñ\82Æ\82È\82é\81B\r
80 \r
81 void CopyKanjiString(LPTSTR pDst, LPCTSTR pSrc, DWORD nLen);\r
82 \r
83 \r
84 //////////////////////////////////\r
85 // BASE64 Encode\r
86 //////////////////////////////////\r
87 //\r
88 // This encoder \r
89 \r
90 char *Base64Encode(const LPBYTE pBinary, DWORD nSrcLen);\r
91 LPBYTE Base64Decode(const char *pM64str, LPDWORD pDataSize);\r
92 \r
93 \r
94 #ifdef COMMENT\r
95 //////////////////////////////////\r
96 // BASE64 Decode\r
97 //////////////////////////////////\r
98 \r
99 BOOL MimeDec(char *pDst, const char *pSrc);\r
100 \r
101 //////////////////////////////////////////////////\r
102 // BASE64 Encode\r
103 //////////////////////////////////////////////////\r
104 \r
105 // \8ae\83G\83\93\83R\81[\83h\92P\88Ê\82Í75\95\8e\9a\82É\90§\8cÀ\82³\82ê\82é\82½\82ß\81A\83G\83\93\83R\81[\83h\8cã\82Ì\95\8e\9a\97ñ\82Í\95¡\90\94\8ds\82É\93n\82é\89Â\94\\90«\82ª\82 \82é\81B\r
106 // \82±\82ê\82ð\8eó\82¯\82Ä\81A\83G\83\93\83R\81[\83h\8c\8b\89Ê\82Í\95\8e\9a\97ñ\82Ì\83\8a\83X\83g\82Æ\82µ\82Ä\8eÀ\8c»\82µ\82Ä\82¢\82é\81B\r
107 // \82»\82Ì\82½\82ß\81A\97Ì\88æ\8aÇ\97\9d\8fã\81A\83G\83\93\83R\81[\83_\82Í\83N\83\89\83X\82Æ\82µ\82Ä\8eÀ\91\95\82·\82é\81B\r
108 \r
109 // \8am\95Û\82µ\82½\97Ì\88æ\82ÍBase64Encoder\82ª\8aÇ\97\9d\82·\82é\82½\82ß\81A\8aJ\95ú\82Ì\95K\97v\82Í\82È\82¢\81B\r
110 // \r
111 // \83G\83\93\83R\81[\83h\82Í\8d¡\82Ì\82Æ\82±\82ëISO-2022-JP(JIS)\82Ì\82Ý\81B\91¼\82Ì\83R\81[\83h\83Z\83b\83g\82É\82Â\82¢\82Ä\82Í\82í\82©\82ç\82È\82¢\82Ì\82Å(^^;\8dl\97\82µ\82Ä\82¢\82È\82¢\81B\r
112 // 2byte\95\8e\9a\82Å\82 \82ê\82Î\81A\91½\8f­\82Ì\8fC\90³\82Å\89½\82Æ\82©\82È\82é\82Æ\82Í\8ev\82¤\82Ì\82¾\82ª\81c\r
113 \r
114 // \82Ü\82½\81ABase64Encoder\82É\90H\82í\82¹\82½\95\8e\9a\97ñ\82ÍASCII\82Å\82 \82Á\82Ä\82à\83G\83\93\83R\81[\83h\82·\82é\81B\r
115 // \83G\83\93\83R\81[\83h\82µ\82½\95\8e\9a\97ñ\82ª\91S\95\94ASCII\82Å\82 \82Á\82Ä\82à\83R\81[\83h\83Z\83b\83g\82Í2022-JP\82Æ\82È\82é\81B(\82¿\82å\82Á\82Æ\82¾\82³\82¢)\r
116 \r
117 // \83G\83\93\83R\81[\83h\82·\82é\82½\82ß\82É\82Í\81ABase64Encoder::Encode()\82ð\8cÄ\82Ô\81B\r
118 // \83G\83\93\83R\81[\83h\82³\82ê\82½\95\8e\9a\97ñ\82ð\8eæ\93¾\82·\82é\8dÛ\82É\82Í\81A Base64Encoder::Item *p;\82ð\90é\8c¾\82µ\82Ä\82¨\82¢\82Ä\81A\r
119 // p->Next()\82Å\83\8b\81[\83v\82³\82¹\82é\81B\8eÀ\8dÛ\82Ì\8ds\8fî\95ñ\82Íp->Value()\82Å\8eæ\93¾\82Å\82«\82é\81B\r
120 \r
121 class Base64Encoder{\r
122 public:\r
123         class Item {\r
124                 char *pLine;\r
125                 Item *pNext;\r
126 \r
127                 friend class Base64Encoder;\r
128         public:\r
129                 Item *Next() { return (pNext && *(pNext->pLine) == 0) ? NULL : pNext; }\r
130                 const char *Line() { return pLine;}\r
131         };\r
132 \r
133 protected:\r
134 \r
135         Item *head, *tail;\r
136 \r
137         char *AllocLine();\r
138 \r
139         // pStr\82ð\83G\83\93\83R\81[\83h\82µ\82ÄpBuf\82É\8ai\94[\81B\r
140         // pSize\82Í\8cÄ\82Ñ\8fo\82µ\8e\9e\82ÍpBuf\82Ì\83T\83C\83Y\81B\96ß\82è\8e\9e\82É\82Í\96¢\8eg\97p\97Ì\88æ\82Ì\88Ê\92u\r
141         BOOL EncodeBuf(char *pBuf, DWORD *pSize, char *pStr);\r
142 \r
143         DWORD GetToken(char *p, BOOL *pKanji, DWORD *pType);\r
144 \r
145         // pStr\82ðpLine\82Ö\83G\83\93\83R\81[\83h\82·\82é\81B\r
146         // \93ü\82è\82«\82ç\82È\82©\82Á\82½\8fê\8d\87\81\96ß\82è\92l\82Æ\82µ\82Ä\83G\83\93\83R\81[\83h\96¢\97¹\97Ì\88æ\82Ì\90æ\93ª\82ð\95Ô\82·\81B\r
147         char *EncodeLine(char *pStr, char *pLine, BOOL *pKanji);\r
148 \r
149 public:\r
150 \r
151         Base64Encoder() : head(NULL), tail(NULL) {}\r
152         ~Base64Encoder();\r
153 \r
154         BOOL Encode(char *str);\r
155 \r
156         Item *First() { return head; }\r
157 };\r
158 #endif\r
159 \r
160 //////////////////////////////////\r
161 // \95\8e\9a\8eí\94»\95Ê\97p\83}\83N\83\8d\r
162 //////////////////////////////////\r
163 \r
164 #if defined(TOMBO_LANG_ENGLISH)\r
165 #define iskanji(c) (0)\r
166 #define iskanji2(c) (0)\r
167 #else\r
168 #define iskanji(c) (((unsigned char)c) >= 0x81 && ((unsigned char)c) <= 0x9F || ((unsigned char)c)>=0xE0 && ((unsigned char)c) <= 0xFC)\r
169 #define iskanji2(c) (((unsigned char)c) >= 0x40 && ((unsigned char)c) <= 0xFC && ((unsigned char)c) != 0x7F)\r
170 #endif\r
171 \r
172 //////////////////////////////////\r
173 // helper functions\r
174 //////////////////////////////////\r
175 \r
176 // remove '\' \r
177 // ex. aa\xx\ -> aa\xx\r
178 void ChopFileSeparator(LPTSTR pBuf);\r
179 \r
180 void TrimRight(LPTSTR pBuf);\r
181 \r
182 // Eliminate letters "\\/:,;*?<>\"\t" from pSrc.\r
183 // pDst has at least same size of pSrc\r
184 void DropInvalidFileChar(LPTSTR pDst, LPCTSTR pSrc);\r
185 \r
186 LPCTSTR GetNextDirSeparator(LPCTSTR pStart);\r
187 \r
188 // chop file name and leave path.\r
189 // ex. C:\foo\bar\baz.txt -> C:\foo\bar\ \r
190 void GetFilePath(LPTSTR pPath, LPCTSTR pFullPath);\r
191 \r
192 //////////////////////////////////\r
193 // Release buffer\r
194 \r
195 // These function clear buffer to zero before release memory.\r
196 \r
197 void WipeOutAndDelete(LPTSTR pMemo);\r
198 #ifdef _WIN32_WCE\r
199 void WipeOutAndDelete(char *pMemo);\r
200 #endif\r
201 \r
202 //////////////////////////////////\r
203 // Delete file\r
204 // before deleting, write contents to zero.\r
205 \r
206 BOOL WipeOutAndDeleteFile(LPCTSTR pFile);\r
207 \r
208 #endif\r