| 5461 |
return (index); |
return (index); |
| 5462 |
} |
} |
| 5463 |
|
|
| 5464 |
// unicode(UTF-32,wchar_t)をバッファへ書き込む |
// unicode(UTF-32)をバッファ(t.CodePage)へ書き込む |
| 5465 |
static void UnicodeToCP932(unsigned int code) |
static void UnicodeToCP932(unsigned int code) |
| 5466 |
{ |
{ |
| 5467 |
wchar_t wchar; |
size_t mblen; |
|
int ret; |
|
| 5468 |
char mbchar[2]; |
char mbchar[2]; |
|
unsigned short cset; |
|
|
|
|
|
if (code >= 0x10000) { |
|
|
goto unknown; |
|
|
} |
|
|
wchar = (wchar_t)code; |
|
| 5469 |
|
|
| 5470 |
// UnicodeからDEC特殊文字へのマッピング |
// UnicodeからDEC特殊文字へのマッピング |
| 5471 |
if (ts.UnicodeDecSpMapping) { |
if (ts.UnicodeDecSpMapping) { |
| 5472 |
cset = UTF32ToDecSp(wchar); |
unsigned short cset; |
| 5473 |
|
cset = UTF32ToDecSp(code); |
| 5474 |
if (((cset >> 8) & ts.UnicodeDecSpMapping) != 0) { |
if (((cset >> 8) & ts.UnicodeDecSpMapping) != 0) { |
| 5475 |
PutDecSp(cset & 0xff); |
PutDecSp(cset & 0xff); |
| 5476 |
return; |
return; |
| 5478 |
} |
} |
| 5479 |
|
|
| 5480 |
// Unicode -> 内部コード(ts.CodePage)へ変換して出力 |
// Unicode -> 内部コード(ts.CodePage)へ変換して出力 |
| 5481 |
if (ts.CodePage == 932) { |
mblen = UTF32ToMBCP(code, ts.CodePage, mbchar, 2); |
| 5482 |
ret = (int)UTF16ToCP932(&wchar, 1, &cset); |
#if 1 // U+203e OVERLINE 特別処理 |
| 5483 |
if (ret == 0) { |
if (code == 0x203e && ts.CodePage == 932) { |
| 5484 |
// 変換できなかった |
// U+203eは0x7e'~'に変換される |
| 5485 |
; |
// 無理やり漢字出力する |
| 5486 |
} else if (cset < 0x100) { |
mbchar[0] = 0; // この0のため、クリップボードに文字列がうまく入らない |
| 5487 |
// 1byte文字 |
mbchar[1] = 0x7e; |
| 5488 |
mbchar[0] = (char)cset; |
mblen = 2; |
|
ret = 1; |
|
|
} else { |
|
|
// 2byte文字 |
|
|
mbchar[0] = (char)(cset >> 8); |
|
|
mbchar[1] = (char)(cset & 0xff); |
|
|
ret = 2; |
|
|
} |
|
|
} else { |
|
|
ret = WideCharToMultiByte(ts.CodePage, 0, &wchar, 1, mbchar, 2, NULL, NULL); |
|
|
} |
|
|
if (ret == 1 && mbchar[0] == '?' && code != '?') { |
|
|
// 変換できなかったとき、ret=1, '?' を返してくる |
|
|
ret = 0; |
|
| 5489 |
} |
} |
| 5490 |
switch (ret) { |
#endif |
| 5491 |
|
switch (mblen) { |
| 5492 |
case 0: |
case 0: |
|
unknown: |
|
| 5493 |
PutChar('?'); |
PutChar('?'); |
| 5494 |
if (ts.UnknownUnicodeCharaAsWide) { |
if (ts.UnknownUnicodeCharaAsWide) { |
| 5495 |
PutChar('?'); |
PutChar('?'); |