| |
140 |
140 |
case _T('n'): |
| |
141 |
141 |
*pszOut++ = _T('\n'); |
| |
142 |
142 |
break; |
| |
143 |
143 |
default: |
| |
144 |
144 |
*pszOut++ = _T('\\'); |
| |
145 |
145 |
} |
| |
146 |
146 |
} |
| |
147 |
147 |
else |
| |
148 |
148 |
*pszOut++ = *pszIn++; |
| |
149 |
149 |
} |
| |
150 |
150 |
*pszOut = _T('\0'); |
| |
151 |
151 |
} |
| |
152 |
152 |
|
| |
153 |
153 |
CLangData::CLangData() : |
| |
154 |
154 |
m_pszFilename(NULL), |
| |
155 |
155 |
m_pszLngName(NULL), |
| |
156 |
156 |
m_pszFontFace(NULL), |
| |
157 |
157 |
m_wPointSize(0), |
| |
158 |
158 |
m_pszHelpName(NULL), |
| |
159 |
159 |
m_pszAuthor(NULL), |
| |
160 |
|
m_pszVersion(NULL), |
| |
161 |
160 |
m_bRTL(false), |
| |
162 |
161 |
m_uiSectionID(0), |
| |
163 |
162 |
m_bUpdating(false) |
| |
164 |
163 |
{ |
| |
165 |
164 |
} |
| |
166 |
165 |
|
| |
167 |
166 |
CLangData::~CLangData() |
| |
168 |
167 |
{ |
| |
169 |
168 |
delete [] m_pszFilename; |
| |
170 |
169 |
delete [] m_pszLngName; |
| |
171 |
170 |
delete [] m_pszFontFace; |
| |
172 |
171 |
delete [] m_pszHelpName; |
| |
173 |
172 |
delete [] m_pszAuthor; |
| |
174 |
|
delete [] m_pszVersion; |
| |
175 |
173 |
} |
| |
176 |
174 |
|
| |
177 |
175 |
void CLangData::Clear() |
| |
178 |
176 |
{ |
| |
179 |
177 |
delete [] m_pszFilename; |
| |
180 |
178 |
m_pszFilename = NULL; |
| |
181 |
179 |
delete [] m_pszLngName; |
| |
182 |
180 |
m_pszLngName = NULL; |
| |
183 |
181 |
delete [] m_pszFontFace; |
| |
184 |
182 |
m_pszFontFace = NULL; |
| |
185 |
183 |
delete [] m_pszHelpName; |
| |
186 |
184 |
m_pszHelpName = NULL; |
| |
187 |
185 |
delete [] m_pszAuthor; |
| |
188 |
186 |
m_pszAuthor = NULL; |
| |
189 |
|
delete [] m_pszVersion; |
| |
190 |
|
m_pszVersion = NULL; |
| |
191 |
187 |
|
| |
192 |
188 |
m_mapTranslation.clear(); |
| |
193 |
189 |
} |
| |
194 |
190 |
|
| |
195 |
191 |
CLangData::CLangData(const CLangData& ld) : |
| |
196 |
192 |
m_pszFilename(NULL), |
| |
197 |
193 |
m_pszLngName(NULL), |
| |
198 |
194 |
m_pszFontFace(NULL), |
| |
199 |
195 |
m_pszHelpName(NULL), |
| |
200 |
|
m_pszAuthor(NULL), |
| |
201 |
|
m_pszVersion(NULL) |
| |
|
196 |
m_pszAuthor(NULL) |
| |
202 |
197 |
{ |
| |
203 |
198 |
SetFilename(ld.GetFilename(true)); |
| |
204 |
199 |
SetLangName(ld.GetLangName()); |
| |
205 |
200 |
SetFontFace(ld.GetFontFace()); |
| |
206 |
201 |
SetPointSize(ld.GetPointSize()); |
| |
207 |
202 |
SetDirection(ld.GetDirection()); |
| |
208 |
203 |
SetHelpName(ld.GetHelpName()); |
| |
209 |
204 |
SetAuthor(ld.GetAuthor()); |
| |
210 |
|
SetVersion(ld.GetVersion()); |
| |
211 |
205 |
} |
| |
212 |
206 |
|
| |
213 |
207 |
CLangData& CLangData::operator=(const CLangData& rSrc) |
| |
214 |
208 |
{ |
| |
215 |
209 |
if(this != &rSrc) |
| |
216 |
210 |
{ |
| |
217 |
211 |
SetFilename(rSrc.GetFilename(true)); |
| |
218 |
212 |
SetLangName(rSrc.GetLangName()); |
| |
219 |
213 |
SetFontFace(rSrc.GetFontFace()); |
| |
220 |
214 |
SetPointSize(rSrc.GetPointSize()); |
| |
221 |
215 |
SetDirection(rSrc.GetDirection()); |
| |
222 |
216 |
SetHelpName(rSrc.GetHelpName()); |
| |
223 |
217 |
SetAuthor(rSrc.GetAuthor()); |
| |
224 |
|
SetVersion(rSrc.GetVersion()); |
| |
225 |
218 |
} |
| |
226 |
219 |
|
| |
227 |
220 |
return *this; |
| |
228 |
221 |
} |
| |
229 |
222 |
|
| |
230 |
223 |
bool CLangData::ReadInfo(PCTSTR pszFile) |
| |
231 |
224 |
{ |
| |
232 |
225 |
try |
| |
233 |
226 |
{ |
| |
234 |
227 |
icpf::config cfg(icpf::config::eIni); |
| |
235 |
228 |
const uint_t uiLangName = cfg.register_string(_T("Info/Lang Name"), _t("")); |
| |
236 |
229 |
const uint_t uiFontFace = cfg.register_string(_T("Info/Font Face"), _T("")); |
| |
237 |
230 |
const uint_t uiSize = cfg.register_signed_num(_T("Info/Size"), 0, 0, 0xffff); |
| |
238 |
231 |
const uint_t uiRTL = cfg.register_bool(_T("Info/RTL reading order"), false); |
| |
239 |
232 |
const uint_t uiHelpName = cfg.register_string(_T("Info/Help name"), _T("")); |
| |
240 |
233 |
const uint_t uiAuthor = cfg.register_string(_T("Info/Author"), _T("")); |
| |
241 |
|
const uint_t uiVersion = cfg.register_string(_T("Info/Version"), _T("")); |
| |
242 |
234 |
cfg.read(pszFile); |
| |
243 |
235 |
|
| |
244 |
236 |
const tchar_t* psz = cfg.get_string(uiLangName); |
| |
245 |
237 |
if(!psz || psz[0] == _t('\0')) |
| |
246 |
238 |
return false; |
| |
247 |
239 |
SetLangName(psz); |
| |
248 |
240 |
|
| |
249 |
241 |
psz = cfg.get_string(uiFontFace); |
| |
250 |
242 |
if(!psz || psz[0] == _t('\0')) |
| |
251 |
243 |
return false; |
| |
252 |
244 |
SetFontFace(psz); |
| |
253 |
245 |
|
| |
254 |
246 |
ll_t ll = cfg.get_signed_num(uiSize); |
| |
255 |
247 |
if(ll == 0) |
| |
256 |
248 |
return false; |
| |
257 |
249 |
SetPointSize((WORD)ll); |
| |
258 |
250 |
|
| |
259 |
251 |
SetDirection(cfg.get_bool(uiRTL)); |
| |
260 |
252 |
|
| |
261 |
253 |
psz = cfg.get_string(uiHelpName); |
| |
262 |
254 |
if(!psz || psz[0] == _t('\0')) |
| |
263 |
255 |
return false; |
| |
264 |
256 |
SetHelpName(psz); |
| |
265 |
257 |
|
| |
266 |
258 |
psz = cfg.get_string(uiAuthor); |
| |
267 |
259 |
if(!psz || psz[0] == _t('\0')) |
| |
268 |
260 |
return false; |
| |
269 |
261 |
SetAuthor(psz); |
| |
270 |
262 |
|
| |
271 |
|
psz = cfg.get_string(uiVersion); |
| |
272 |
|
if(!psz || psz[0] == _t('\0')) |
| |
273 |
|
return false; |
| |
274 |
|
SetVersion(psz); |
| |
275 |
|
|
| |
276 |
263 |
SetFilename(pszFile); |
| |
277 |
264 |
|
| |
278 |
265 |
return true; |
| |
279 |
266 |
} |
| |
280 |
267 |
catch(...) |
| |
281 |
268 |
{ |
| |
282 |
269 |
return false; |
| |
283 |
270 |
} |
| |
284 |
271 |
} |
| |
285 |
272 |
|
| |
286 |
273 |
void CLangData::EnumAttributesCallback(bool bGroup, const tchar_t* pszName, const tchar_t* pszValue, ptr_t pData) |
| |
287 |
274 |
{ |
| |
288 |
275 |
CLangData* pLangData = (CLangData*)pData; |
| |
289 |
276 |
assert(pLangData); |
| |
290 |
277 |
assert(pszName); |
| |
291 |
278 |
if(!pLangData || !pszName) |
| |
292 |
279 |
return; |
| |
293 |
280 |
|
| |
294 |
281 |
if(bGroup && _tcsicmp(pszName, _t("Info")) == 0) |
| |
295 |
282 |
return; |
|
| |
388 |
375 |
} |
| |
389 |
376 |
*pszOut = _T('\0'); |
| |
390 |
377 |
|
| |
391 |
378 |
} |
| |
392 |
379 |
|
| |
393 |
380 |
bool CLangData::ReadTranslation(PCTSTR pszFile, bool bUpdateTranslation) |
| |
394 |
381 |
{ |
| |
395 |
382 |
try |
| |
396 |
383 |
{ |
| |
397 |
384 |
if(!bUpdateTranslation) |
| |
398 |
385 |
Clear(); |
| |
399 |
386 |
|
| |
400 |
387 |
|
| |
401 |
388 |
icpf::config cfg(icpf::config::eIni); |
| |
402 |
389 |
const uint_t uiLangName = cfg.register_string(_T("Info/Lang Name"), _t("")); |
| |
403 |
390 |
const uint_t uiFontFace = cfg.register_string(_T("Info/Font Face"), _T("")); |
| |
404 |
391 |
const uint_t uiSize = cfg.register_signed_num(_T("Info/Size"), 0, 0, 0xffff); |
| |
405 |
392 |
const uint_t uiRTL = cfg.register_bool(_T("Info/RTL reading order"), false); |
| |
406 |
393 |
const uint_t uiHelpName = cfg.register_string(_T("Info/Help name"), _T("")); |
| |
407 |
394 |
const uint_t uiAuthor = cfg.register_string(_T("Info/Author"), _T("")); |
| |
408 |
|
const uint_t uiVersion = cfg.register_string(_T("Info/Version"), _T("")); |
| |
409 |
395 |
cfg.read(pszFile); |
| |
410 |
396 |
|
| |
411 |
397 |
const tchar_t* psz = cfg.get_string(uiLangName); |
| |
412 |
398 |
if(!psz || psz[0] == _t('\0')) |
| |
413 |
399 |
return false; |
| |
414 |
400 |
SetLangName(psz); |
| |
415 |
401 |
|
| |
416 |
402 |
psz = cfg.get_string(uiFontFace); |
| |
417 |
403 |
if(!psz || psz[0] == _t('\0')) |
| |
418 |
404 |
return false; |
| |
419 |
405 |
SetFontFace(psz); |
| |
420 |
406 |
|
| |
421 |
407 |
ll_t ll = cfg.get_signed_num(uiSize); |
| |
422 |
408 |
if(ll == 0) |
| |
423 |
409 |
return false; |
| |
424 |
410 |
SetPointSize((WORD)ll); |
| |
425 |
411 |
|
| |
426 |
412 |
SetDirection(cfg.get_bool(uiRTL)); |
| |
427 |
413 |
|
| |
428 |
414 |
psz = cfg.get_string(uiHelpName); |
| |
429 |
415 |
if(!psz || psz[0] == _t('\0')) |
| |
430 |
416 |
return false; |
| |
431 |
417 |
SetHelpName(psz); |
| |
432 |
418 |
|
| |
433 |
419 |
psz = cfg.get_string(uiAuthor); |
| |
434 |
420 |
if(!psz || psz[0] == _t('\0')) |
| |
435 |
421 |
return false; |
| |
436 |
422 |
SetAuthor(psz); |
| |
437 |
423 |
|
| |
438 |
|
psz = cfg.get_string(uiVersion); |
| |
439 |
|
if(!psz || psz[0] == _t('\0')) |
| |
440 |
|
return false; |
| |
441 |
|
SetVersion(psz); |
| |
442 |
|
|
| |
443 |
424 |
m_bUpdating = bUpdateTranslation; |
| |
444 |
425 |
m_uiSectionID = 0; |
| |
445 |
426 |
if(!cfg.enum_properties(_t("*"), EnumAttributesCallback, this)) |
| |
446 |
427 |
{ |
| |
447 |
428 |
m_bUpdating = false; |
| |
448 |
429 |
return false; |
| |
449 |
430 |
} |
| |
450 |
431 |
m_bUpdating = false; |
| |
451 |
432 |
|
| |
452 |
433 |
SetFilename(pszFile); |
| |
453 |
434 |
|
| |
454 |
435 |
return true; |
| |
455 |
436 |
} |
| |
456 |
437 |
catch(...) |
| |
457 |
438 |
{ |
| |
458 |
439 |
return false; |
| |
459 |
440 |
} |
| |
460 |
441 |
} |
| |
461 |
442 |
|
| |
462 |
443 |
void CLangData::WriteTranslation(PCTSTR pszPath) |
| |
463 |
444 |
{ |
| |
464 |
445 |
const int iBufferSize = 256; |
| |
465 |
446 |
tchar_t szTemp[iBufferSize]; |
| |
466 |
447 |
|
| |
467 |
448 |
|
| |
468 |
449 |
icpf::config cfg(icpf::config::eIni); |
| |
469 |
450 |
cfg.set_string(_t("Info/Lang Name"), m_pszLngName); |
| |
470 |
451 |
cfg.set_string(_T("Info/Font Face"), m_pszFontFace); |
| |
471 |
452 |
cfg.set_string(_T("Info/Size"), _itot(m_wPointSize, szTemp, 10)); |
| |
472 |
453 |
cfg.set_string(_T("Info/RTL reading order"), m_bRTL ? _T("1") : _T("0")); |
| |
473 |
454 |
cfg.set_string(_T("Info/Help name"), m_pszHelpName); |
| |
474 |
455 |
cfg.set_string(_T("Info/Author"), m_pszAuthor); |
| |
475 |
|
cfg.set_string(_T("Info/Version"), m_pszVersion); |
| |
476 |
456 |
|
| |
477 |
457 |
tstring_t strText; |
| |
478 |
458 |
for(translation_map::iterator it = m_mapTranslation.begin(); it != m_mapTranslation.end(); it++) |
| |
479 |
459 |
{ |
| |
480 |
460 |
uint_t uiKey = (*it).first; |
| |
481 |
461 |
_sntprintf(szTemp, iBufferSize - 1, UIFMT _T("/") UIFMT _T("[") UIXFMT _T("]"), (uiKey >> 16), uiKey & 0x0000ffff, (*it).second.GetChecksum()); |
| |
482 |
462 |
|
| |
483 |
463 |
strText = (*it).second.GetText(); |
| |
484 |
464 |
tstring_t::size_type stPos; |
| |
485 |
465 |
while((stPos = strText.find_first_of(_t("\r\n\t"))) != tstring_t::npos) |
| |
486 |
466 |
{ |
| |
487 |
467 |
switch(strText[stPos]) |
| |
488 |
468 |
{ |
| |
489 |
469 |
case _t('\r'): |
| |
490 |
470 |
strText.replace(stPos, 1, _t("\\r")); |
| |
491 |
471 |
break; |
| |
492 |
472 |
case _t('\n'): |
| |
493 |
473 |
strText.replace(stPos, 1, _t("\\n")); |
| |
494 |
474 |
break; |
| |
495 |
475 |
case _t('\t'): |
|
| |
602 |
582 |
{ |
| |
603 |
583 |
if (m_pszFontFace) |
| |
604 |
584 |
delete [] m_pszFontFace; |
| |
605 |
585 |
m_pszFontFace=new TCHAR[_tcslen(psz)+1]; |
| |
606 |
586 |
_tcscpy(m_pszFontFace, psz); |
| |
607 |
587 |
} |
| |
608 |
588 |
|
| |
609 |
589 |
void CLangData::SetHelpName(PCTSTR psz) |
| |
610 |
590 |
{ |
| |
611 |
591 |
SetFnameData(&m_pszHelpName, psz); |
| |
612 |
592 |
} |
| |
613 |
593 |
|
| |
614 |
594 |
void CLangData::SetAuthor(PCTSTR psz) |
| |
615 |
595 |
{ |
| |
616 |
596 |
if (m_pszAuthor) |
| |
617 |
597 |
delete [] m_pszAuthor; |
| |
618 |
598 |
m_pszAuthor=new TCHAR[_tcslen(psz)+1]; |
| |
619 |
599 |
_tcscpy(m_pszAuthor, psz); |
| |
620 |
600 |
} |
| |
621 |
601 |
|
| |
622 |
|
void CLangData::SetVersion(PCTSTR psz) |
| |
623 |
|
{ |
| |
624 |
|
if (m_pszVersion) |
| |
625 |
|
delete [] m_pszVersion; |
| |
626 |
|
m_pszVersion=new TCHAR[_tcslen(psz)+1]; |
| |
627 |
|
_tcscpy(m_pszVersion, psz); |
| |
628 |
|
} |
| |
629 |
|
|
| |
630 |
602 |
void CLangData::SetFnameData(PTSTR *ppszDst, PCTSTR pszSrc) |
| |
631 |
603 |
{ |
| |
632 |
604 |
if (*ppszDst) |
| |
633 |
605 |
delete [] (*ppszDst); |
| |
634 |
606 |
const TCHAR* pszLast=NULL; |
| |
635 |
607 |
if ( (pszLast=_tcsrchr(pszSrc, _T('\\'))) != NULL) |
| |
636 |
608 |
pszLast++; |
| |
637 |
609 |
else |
| |
638 |
610 |
pszLast=pszSrc; |
| |
639 |
611 |
|
| |
640 |
612 |
|
| |
641 |
613 |
*ppszDst=new TCHAR[_tcslen(pszLast)+1]; |
| |
642 |
614 |
_tcscpy(*ppszDst, pszLast); |
| |
643 |
615 |
} |
| |
644 |
616 |
|
| |
645 |
617 |
CResourceManager::CResourceManager() : |
| |
646 |
618 |
m_pfnCallback(NULL), |
| |
647 |
619 |
m_hRes(NULL) |
| |
648 |
620 |
{ |
| |
649 |
621 |
InitializeCriticalSection(&m_cs); |