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

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

構成管理を変更中・・・(いったんコミット)

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