Revision: 8135 https://osdn.net/projects/ttssh2/scm/svn/commits/8135 Author: zmatsuo Date: 2019-09-13 01:00:23 +0900 (Fri, 13 Sep 2019) Log Message: ----------- 描画境界の後ろに2byteより大きい文字があった場合でも正しく描画 Modified Paths: -------------- branches/unicode_buf/teraterm/teraterm/buffer.c -------------- next part -------------- Modified: branches/unicode_buf/teraterm/teraterm/buffer.c =================================================================== --- branches/unicode_buf/teraterm/teraterm/buffer.c 2019-09-12 16:00:11 UTC (rev 8134) +++ branches/unicode_buf/teraterm/teraterm/buffer.c 2019-09-12 16:00:23 UTC (rev 8135) @@ -3246,6 +3246,7 @@ const buff_char_t *b; TCharAttr TempAttr; BOOL DrawFlag = FALSE; + BOOL SetString = FALSE; // \x83A\x83g\x83\x8A\x83r\x83\x85\x81[\x83g\x8E擾 TempAttr.Attr = AttrBuff[TmpPtr+istart+count] & ~ AttrKanji; @@ -3260,6 +3261,24 @@ if (b->u32 == 0) { // \x91S\x8Ap\x82̎\x9F\x82̕\xB6\x8E\x9A,\x8F\x88\x97\x9D\x95s\x97v } else { + if (count == 0) { + // \x8Dŏ\x89\x82\xCC1\x95\xB6\x8E\x9A\x96\xDA + CurAttr = TempAttr; + CurAttrEmoji = b->Emoji; + CurSelected = CheckSelect(istart+count,SY); + SetString = TRUE; + } else if (b->u32 != 0 && + ((TCharAttrCmp(CurAttr, TempAttr) != 0 || CurAttrEmoji != b->Emoji) || + (CurSelected != CheckSelect(istart+count,SY)))){ + // \x82\xB1\x82̕\xB6\x8E\x9A\x82ŃA\x83g\x83\x8A\x83r\x83\x85\x81[\x83g\x82\xAA\x95ω\xBB\x82\xB5\x82\xBD \x81\xA8 \x95`\x89\xE6 + DrawFlag = TRUE; + count--; + } else { + SetString = TRUE; + } + } + + if (SetString) { if (b->u32 < 0x10000) { bufW[lenW] = b->wc2[0]; bufWW[lenW] = b->HalfWidth ? 'H' : 'W'; @@ -3272,7 +3291,7 @@ bufW[lenW] = b->wc2[1]; bufWW[lenW] = '0'; lenW++; - DrawFlag = TRUE; // \x82\xB7\x82\xAE\x82ɕ`\x89悷\x82\xE9 +// DrawFlag = TRUE; // \x82\xB7\x82\xAE\x82ɕ`\x89悷\x82\xE9 } if (b->CombinationCharCount16 != 0) { @@ -3287,24 +3306,6 @@ } } - if (b->Emoji) { - int a = 0; - } - if (count == 0) { - // \x8Dŏ\x89\x82\xCC1\x95\xB6\x8E\x9A\x96\xDA - CurAttr = TempAttr; - CurAttrEmoji = b->Emoji; - CurSelected = CheckSelect(istart+count,SY); - } else if (b->u32 != 0 && - ((TCharAttrCmp(CurAttr, TempAttr) != 0 || CurAttrEmoji != b->Emoji) || - (CurSelected != CheckSelect(istart+count,SY)))){ - // \x82\xB1\x82̕\xB6\x8E\x9A\x82ŃA\x83g\x83\x8A\x83r\x83\x85\x81[\x83g\x82\xAA\x95ω\xBB\x82\xB5\x82\xBD \x81\xA8 \x95`\x89\xE6 - DrawFlag = TRUE; - lenA--; - lenW--; - count--; - } - // \x8DŌ\xE3\x82܂ŃX\x83L\x83\x83\x83\x93\x82\xB5\x82\xBD? if (istart + count >= IEnd) { DrawFlag = TRUE; @@ -3317,7 +3318,7 @@ bufW[lenW] = 0; bufWW[lenW] = 0; -#if 0 +#if 1 OutputDebugPrintf("A[%d] '%s'\n", lenA, bufA); OutputDebugPrintfW(L"W[%d] '%s'\n", lenW, bufW); #endif @@ -5796,11 +5797,27 @@ } { const unsigned char attr = AttrBuff[TmpPtr+X]; + wchar_t *attr_str; + if (attr == 0) { + attr_str = wcsdup(L""); + } else + if (attr != 0) { + aswprintf(&attr_str, + L"(%S%S%S%S%S%S%S%S)\n", + (attr & AttrBold) != 0 ? "AttrBold " : "", + (attr & AttrUnder) != 0 ? "AttrUnder " : "", + (attr & AttrSpecial) != 0 ? "AttrSpecial ": "", + (attr & AttrBlink) != 0 ? "AttrBlink ": "", + (attr & AttrReverse) != 0 ? "AttrReverse ": "", + (attr & AttrLineContinued) != 0 ? "AttrLineContinued ": "", + (attr & AttrURL) != 0 ? "AttrURL ": "", + (attr & AttrKanji) != 0 ? "AttrKanji ": "" + ); + } str_len = aswprintf(&str_ptr, L"ch(%d,%d(%d)) px(%d,%d)\n" - L"attr 0x%02x\n" - L" %S%S%S%S%S%S%S%S\n" + L"attr 0x%02x%s%s\n" L"attr2 0x%02x\n" L"attrFore 0x%02x\n" L"attrBack 0x%02x\n" @@ -5808,15 +5825,7 @@ L"CodeLine %s", X, ScreenY, Y, Xw, Yw, - attr, - (attr & AttrBold) != 0 ? "AttrBold " : "", - (attr & AttrUnder) != 0 ? "AttrUnder " : "", - (attr & AttrSpecial) != 0 ? "AttrSpecial ": "", - (attr & AttrBlink) != 0 ? "AttrBlink ": "", - (attr & AttrReverse) != 0 ? "AttrReverse ": "", - (attr & AttrLineContinued) != 0 ? "AttrLineContinued ": "", - (attr & AttrURL) != 0 ? "AttrURL ": "", - (attr & AttrKanji) != 0 ? "AttrKanji ": "", + attr, (attr != 0) ? L"\n " : L"", attr_str, (unsigned char)AttrBuff2[TmpPtr+X], (unsigned char)AttrBuffFG[TmpPtr+X], (unsigned char)AttrBuffBG[TmpPtr+X], @@ -5823,6 +5832,7 @@ // mb_str, cs mb_str ); + free(attr_str); } free(mb_str);