Develop and Download Open Source Software

Browse Subversion Repository

Diff of /trunk/teraterm/teraterm/vtterm.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 7462 by zmatsuo, Sat Mar 9 17:32:42 2019 UTC revision 7464 by zmatsuo, Sat Mar 9 17:33:06 2019 UTC
# Line 5461  static int GetIndexOfCombiningFirstCode( Line 5461  static int GetIndexOfCombiningFirstCode(
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;
# Line 5484  static void UnicodeToCP932(unsigned int Line 5478  static void UnicodeToCP932(unsigned int
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('?');

Legend:
Removed from v.7462  
changed lines
  Added in v.7464

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26