source: dev/trunk/ab5.0/abdev/abdev/nkf_class.cpp@ 681

Last change on this file since 681 was 629, checked in by dai_9181, 16 years ago

MDIINFO構造体をリファクタリング。

File size: 4.5 KB
Line 
1#include "stdafx.h"
2
3#include "common.h"
4
5using namespace ActiveBasic::IDE;
6
7//文字コード変換用クラスライブラリ
8CNkf nkf;
9
10CNkf::CNkf()
11{
12 const std::string nkf32DllPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\nkf32.dll";
13 hLib = LoadLibrary( nkf32DllPath.c_str() );
14 if( !hLib )
15 {
16 MessageBox( NULL, "nkf32.dll が見つかりません。", "エラー", MB_OK | MB_ICONEXCLAMATION );
17 }
18
19 pGetNkfVersion=(GetNkfVersion)GetProcAddress(hLib,"GetNkfVersion");
20 pSetNkfOption=(SetNkfOption)GetProcAddress(hLib,"SetNkfOption");
21 pNkfConvert=(NkfConvert)GetProcAddress(hLib,"NkfConvert");
22 pNkfGetKanjiCode=(NkfGetKanjiCode)GetProcAddress(hLib,"NkfGetKanjiCode");
23}
24
25CNkf::~CNkf(){
26 FreeLibrary(hLib);
27}
28
29
30char *CNkf::RestoreBuffer(char *buffer,int iCharCode){
31 /////////////////////
32 // 文字コードを復元
33 // ※内部表現はShift-JIS
34 /////////////////////
35 extern HANDLE hHeap;
36 char *pBuf;
37
38 pBuf=(char *)HeapAlloc(hHeap,0,lstrlen(buffer)*2+1);
39
40 switch(iCharCode){
41 case NKF_SHIFT_JIS:
42 lstrcpy(pBuf,buffer);
43 break;
44 case NKF_EUC:
45 pSetNkfOption("-ex");
46 pNkfConvert(pBuf,buffer);
47 break;
48 case NKF_ISO_2022_JP:
49 pSetNkfOption("-jx");
50 pNkfConvert(pBuf,buffer);
51 break;
52 case NKF_UTF_8:
53 pSetNkfOption("-wx");
54 pNkfConvert(pBuf,buffer);
55 break;
56 }
57
58 return pBuf;
59}
60
61void CNkf::GetCharCodeName(int iCharCode,char *name){
62 switch(iCharCode){
63 case NKF_SHIFT_JIS:
64 lstrcpy(name,"Shift-JIS");
65 break;
66 case NKF_EUC:
67 lstrcpy(name,"EUC");
68 break;
69 case NKF_ISO_2022_JP:
70 lstrcpy(name,"JIS");
71 break;
72 case NKF_UTF_8:
73 lstrcpy(name,"UTF-8");
74 break;
75 }
76}
77
78char *CNkf::ToCRLF(int iLfCode,char *buffer){
79 extern HANDLE hHeap;
80 int i,i2;
81
82 char *temp;
83 temp=(char *)HeapAlloc(hHeap,0,lstrlen(buffer)*2+1);
84
85 for(i=0,i2=0;;i++,i2++){
86 if(buffer[i]=='\0'){
87 temp[i2]=0;
88 break;
89 }
90 if(iLfCode==LFCODE_LF){
91 if(buffer[i]=='\n'){
92 temp[i2++]='\r';
93 temp[i2]='\n';
94 continue;
95 }
96 }
97 else if(iLfCode==LFCODE_CR){
98 if(buffer[i]=='\r'){
99 temp[i2++]='\r';
100 temp[i2]='\n';
101 continue;
102 }
103 }
104
105 temp[i2]=buffer[i];
106 }
107
108 return temp;
109}
110void CNkf::ToLF(char *buffer){
111 extern HANDLE hHeap;
112 int i,i2;
113
114 for(i=0,i2=0;;i++,i2++){
115 if(buffer[i]=='\r'&&buffer[i+1]=='\n'){
116 buffer[i2]='\n';
117 i++;
118 continue;
119 }
120
121 buffer[i2]=buffer[i];
122 if(buffer[i]=='\0') break;
123 }
124}
125void CNkf::ToCR(char *buffer){
126 extern HANDLE hHeap;
127 int i,i2;
128
129 for(i=0,i2=0;;i++,i2++){
130 if(buffer[i]=='\r'&&buffer[i+1]=='\n'){
131 buffer[i2]='\r';
132 i++;
133 continue;
134 }
135
136 buffer[i2]=buffer[i];
137 if(buffer[i]=='\0') break;
138 }
139}
140
141void CNkf::GetLfCodeName(int iLfCode,char *name){
142 switch(iLfCode){
143 case LFCODE_CRLF:
144 lstrcpy(name,"CRLF");
145 break;
146 case LFCODE_LF:
147 lstrcpy(name,"LF");
148 break;
149 case LFCODE_CR:
150 lstrcpy(name,"CR");
151 break;
152 }
153}
154
155
156
157BOOL CALLBACK nkfDlgCodeSave(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
158 static int WndNum;
159 HWND hList;
160
161 switch(message){
162 case WM_INITDIALOG:
163 SetPosCenter(hwnd);
164
165 WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
166 if(WndNum==-1){
167 //ウィンドウの取得に失敗
168 EndDialog(hwnd,0);
169 break;
170 }
171 if(!IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
172 //テキストドキュメントでないとき
173 EndDialog(hwnd,0);
174 break;
175 }
176
177 hList=GetDlgItem(hwnd,IDC_LIST_CHARCODE);
178 SendMessage(hList,LB_ADDSTRING,0,(long)"Shift-JIS");
179 SendMessage(hList,LB_ADDSTRING,0,(long)"EUC");
180 SendMessage(hList,LB_ADDSTRING,0,(long)"JIS");
181 SendMessage(hList,LB_ADDSTRING,0,(long)"UTF-8");
182 SendMessage(hList,LB_SETCURSEL,MdiInfo[WndNum]->pMdiTextEdit->iCharCode,0);
183
184 hList=GetDlgItem(hwnd,IDC_LIST_LFCODE);
185 SendMessage(hList,LB_ADDSTRING,0,(long)"CRLF(Windows)");
186 SendMessage(hList,LB_ADDSTRING,0,(long)"LF(Unix)");
187 SendMessage(hList,LB_ADDSTRING,0,(long)"CR(Macintosh)");
188 SendMessage(hList,LB_SETCURSEL,MdiInfo[WndNum]->pMdiTextEdit->iLfCode,0);
189 break;
190 case WM_COMMAND:
191 switch(LOWORD(wParam)){
192 case IDOK:
193 //文字コードを取得
194 MdiInfo[WndNum]->pMdiTextEdit->iCharCode=
195 (int)SendDlgItemMessage(hwnd,IDC_LIST_CHARCODE,LB_GETCURSEL,0,0);
196
197 //改行コードを取得
198 MdiInfo[WndNum]->pMdiTextEdit->iLfCode=
199 (int)SendDlgItemMessage(hwnd,IDC_LIST_LFCODE,LB_GETCURSEL,0,0);
200
201 //保存
202 if(!SaveDocument(GetWindow(hClient,GW_CHILD),NULL)) return 0;
203
204 EndDialog(hwnd,1);
205 break;
206 case IDCANCEL:
207 EndDialog(hwnd,0);
208 break;
209 }
210 break;
211 }
212 return 0;
213}
Note: See TracBrowser for help on using the repository browser.