[Ttssh2-commit] [8135] 描画境界の後ろに2byteより大きい文字があった場合でも正しく描画

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2019年 9月 13日 (金) 01:00:23 JST


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);
 


Ttssh2-commit メーリングリストの案内
Back to archive index