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

Last change on this file since 829 was 829, checked in by イグトランス (egtra), 12 years ago

svn:eol-styleとsvn:mime-type(文字コード指定含む)の設定

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