diff --git a/doc/en/html/about/history.html b/doc/en/html/about/history.html
index 6490d8dac..24c63ead2 100644
--- a/doc/en/html/about/history.html
+++ b/doc/en/html/about/history.html
@@ -63,6 +63,7 @@
YYYY.MM.DD (Ver 5.4 not released yet)
Unnecessary overwrite confirmation dialog is no longer displayed when selecting a existing file as a log file at file selecting dialog box.
MACRO: Fixed TTL cannot be execute when it is UTF-8 without BOM.
Fixed to handle U+20000 to U+3FFFF of UTF-8.
+ Fixed display characters containing surrogate pair character when "Drawing resized font to fit cell width"
diff --git a/doc/ja/html/about/history.html b/doc/ja/html/about/history.html
index 80ac38d6a..c1bbe14f7 100644
--- a/doc/ja/html/about/history.html
+++ b/doc/ja/html/about/history.html
@@ -63,6 +63,7 @@ YYYY.MM.DD (Ver 5.4 not released yet)
ログファイルとしてファイル選択ダイアログで既存のファイルを指定した時に上書き確認ダイアログを表示しないようにした。
MACRO: TTL ファイルが BOM なし UTF-8 の場合、実行できない問題を修正した。
UTF-8 の U+20000 から U+3FFFF を正しく扱うよう修正した。
+ "Drawing resized font to fit cell width" が on のとき、サロゲートペアの文字が存在したとき正しく表示するよう修正した。
diff --git a/teraterm/teraterm/vtdisp.c b/teraterm/teraterm/vtdisp.c
index 92e0acef6..47b5f5441 100644
--- a/teraterm/teraterm/vtdisp.c
+++ b/teraterm/teraterm/vtdisp.c
@@ -2887,6 +2887,12 @@ static void DrawStrWSub(HDC DC, HDC BGDC, const wchar_t *StrW, const int *Dx,
* StrW U+307B U+309A
* cells 0 2
*
+ * len=4
+ * 吉(つちよし) 野 家
+ * 0 1 2
+ * StrW 0xd842 0xdfb7 0x91ce 0x5bb6
+ * cells 0 2 2 2
+ *
*/
void DrawStrW(HDC DC, HDC BGDC, const wchar_t *StrW, const char *cells, int len, int font_width, int font_height,
int Y, int *X)
@@ -2926,7 +2932,7 @@ void DrawStrW(HDC DC, HDC BGDC, const wchar_t *StrW, const char *cells, int len,
else {
SIZE size;
GetTextExtentPoint32W(DC, &StrW[i - zero_count], 1 + zero_count, &size);
- if ((size.cx == Dx[i]) || (size.cx == Dx[i] + 1)) {
+ if (zero_count == 0 && ((size.cx == Dx[i]) || (size.cx == Dx[i] + 1))) {
wchar_count++;
cell_count += cells[i];
}
@@ -2938,10 +2944,10 @@ void DrawStrW(HDC DC, HDC BGDC, const wchar_t *StrW, const char *cells, int len,
}
DrawChar(DC, BGDC, *X, Y, &StrW[i - zero_count], 1 + zero_count, cells[i]);
*X += cells[i] * FontWidth;
+ start_idx += 1 + zero_count;
zero_count = 0;
cell_count = 0;
wchar_count = 0;
- start_idx++;
}
}
}