Revision: 8752 https://osdn.net/projects/ttssh2/scm/svn/commits/8752 Author: zmatsuo Date: 2020-04-26 23:36:00 +0900 (Sun, 26 Apr 2020) Log Message: ----------- 行末で結合文字の処理を修正 - 次の場合誤っていた - カーソルが行末 - wrap状態 - カーソル上の文字が1セル文字 - 例 - U+0061 U+0302 ( a + ^ → â ) Modified Paths: -------------- trunk/teraterm/teraterm/buffer.c -------------- next part -------------- Modified: trunk/teraterm/teraterm/buffer.c =================================================================== --- trunk/teraterm/teraterm/buffer.c 2020-04-26 14:35:51 UTC (rev 8751) +++ trunk/teraterm/teraterm/buffer.c 2020-04-26 14:36:00 UTC (rev 8752) @@ -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