[Ttssh2-commit] [8731] 行末で結合文字の処理を修正

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2020年 4月 15日 (水) 00:44:09 JST


Revision: 8731
          https://osdn.net/projects/ttssh2/scm/svn/commits/8731
Author:   zmatsuo
Date:     2020-04-15 00:44:08 +0900 (Wed, 15 Apr 2020)
Log Message:
-----------
行末で結合文字の処理を修正

- 次の場合誤っていた
  - カーソルが行末
  - wrap状態
  - カーソル上の文字が1セル文字
- 例
  - U+0061 U+0302 ( a + ^ → â )

Modified Paths:
--------------
    branches/unicode_buf_2/teraterm/teraterm/buffer.c

-------------- next part --------------
Modified: branches/unicode_buf_2/teraterm/teraterm/buffer.c
===================================================================
--- branches/unicode_buf_2/teraterm/teraterm/buffer.c	2020-04-13 15:21:24 UTC (rev 8730)
+++ branches/unicode_buf_2/teraterm/teraterm/buffer.c	2020-04-14 15:44:08 UTC (rev 8731)
@@ -2614,12 +2614,15 @@
 
 /**
  *	(x,y)\x82\xC9u32\x82\xF0\x93\xFC\x82\xEA\x82\xE9\x82Ƃ\xAB\x81A\x8C\x8B\x8D\x87\x82\xB7\x82邩?
+ *  @param[in]		wrap		TRUE wrap\x92\x86
  *	@param[in,out]	combine		TRUE/FALSE	\x95\xB6\x8E\x9A\x83R\x81[\x83h\x93I\x82ɂ͌\x8B\x8D\x87\x82\xB7\x82\xE9/\x82\xB5\x82Ȃ\xA2
  *								NULL \x8C\x8B\x89ʂ\xF0\x95Ԃ\xB3\x82Ȃ\xA2
- *	@return	\x8C\x8B\x8D\x87\x82\xB7\x82\xE9\x91O\x82̕\xB6\x8E\x9A\x82ւ̃|\x83C\x83\x93\x83^(1 or 2\x83Z\x83\x8B\x91O)
+ *	@return	\x8C\x8B\x8D\x87\x82\xB7\x82镶\x8E\x9A\x82ւ̃|\x83C\x83\x93\x83^
+ *								1 or 2\x83Z\x83\x8B\x91O
+ *								\x8C\xBB\x8D݂̃Z\x83\x8B (x \x82\xAA\x8Ds\x96\x96\x82\xC5 wrap == TRUE \x8E\x9E)
  *	@return	NULL	\x8C\x8B\x8D\x87\x82\xB5\x82Ȃ\xA2
  */
-static buff_char_t *IsCombiningChar(int x, int y, unsigned int u32, BOOL *combine)
+static buff_char_t *IsCombiningChar(int x, int y, BOOL wrap, unsigned int u32, BOOL *combine)
 {
 	buff_char_t *p = NULL;  // NULL\x82̂Ƃ\xAB\x81A\x91O\x82̕\xB6\x8E\x9A\x82͂Ȃ\xA2
 	LONG LinePtr = GetLinePtr(PageStart+y);
@@ -2634,7 +2637,14 @@
 		*combine = combine_char;
 	}
 
-	if (x >= 1 && !IsBuffPadding(&CodeLineW[x - 1])) {
+	if (x == NumOfColumns - 1 && wrap) {
+		// \x8C\xBB\x8D݈ʒu\x82Ɍ\x8B\x8D\x87\x82\xB7\x82\xE9
+		p = &CodeLineW[x];
+		if (IsBuffPadding(p)){
+			p--;
+		}
+	}
+	else if (x >= 1 && !IsBuffPadding(&CodeLineW[x - 1])) {
 		// 1\x83Z\x83\x8B\x91O
 		p = &CodeLineW[x - 1];
 	}
@@ -2663,7 +2673,7 @@
 
 BOOL BuffIsCombiningCharacter(int x, int y, unsigned int u32)
 {
-	buff_char_t *p = IsCombiningChar(x, y, u32, NULL);
+	buff_char_t *p = IsCombiningChar(x, y, Wrap, u32, NULL);
 	return p != NULL;
 }
 
@@ -2745,7 +2755,7 @@
 
 	// \x8C\x8B\x8D\x87\x95\xB6\x8E\x9A?
 	CombiningChar = FALSE;
-	p = IsCombiningChar(CursorX, CursorY, u32, &CombiningChar);
+	p = IsCombiningChar(CursorX, CursorY, Wrap, u32, &CombiningChar);
 	if (p != NULL || CombiningChar == TRUE) {
 		// \x8C\x8B\x8D\x87\x82\xB7\x82\xE9
 		move_x = 0;  // \x83J\x81[\x83\\x83\x8B\x88ړ\xAE\x97\xCA=0


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