Revision: 10319 https://osdn.net/projects/ttssh2/scm/svn/commits/10319 Author: zmatsuo Date: 2022-10-16 14:36:52 +0900 (Sun, 16 Oct 2022) Log Message: ----------- Viramaの次の文字分文字幅を増やすようにした - 変更前は、Spacing markの時のみ+1していた - 通常の文字の場合も+1するようにした ticket #44424 Ticket Links: ------------ https://osdn.net/projects/ttssh2/tracker/detail/44424 Modified Paths: -------------- trunk/teraterm/teraterm/buffer.c trunk/tests/unicodebuf-combining-spacing_mark.pl -------------- next part -------------- Modified: trunk/teraterm/teraterm/buffer.c =================================================================== --- trunk/teraterm/teraterm/buffer.c 2022-10-15 14:39:23 UTC (rev 10318) +++ trunk/teraterm/teraterm/buffer.c 2022-10-16 05:36:52 UTC (rev 10319) @@ -2676,10 +2676,11 @@ /** * (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 0 \x8C\x8B\x8D\x87\x82\xB5\x82Ȃ\xA2 + * @param[in] u32 Unicode + * @param[in,out] combine u32\x82̕\xB6\x8E\x9A\x8E\xED\x82\xF0\x95Ԃ\xB7(NULL \x8C\x8B\x89ʂ\xF0\x95Ԃ\xB3\x82Ȃ\xA2) + * 0 \x8C\x8B\x8D\x87\x82\xB5\x82Ȃ\xA2 * 1 \x8C\x8B\x8D\x87\x95\xB6\x8E\x9A,Nonspacing Mark, \x83J\x81[\x83\\x83\x8B\x82͈ړ\xAE\x82\xB5\x82Ȃ\xA2 * 2 \x8C\x8B\x8D\x87\x95\xB6\x8E\x9A,Spacing Mark, \x83J\x81[\x83\\x83\x8B\x82\xAA +1 \x88ړ\xAE\x82\xB7\x82\xE9 - * NULL \x8C\x8B\x89ʂ\xF0\x95Ԃ\xB3\x82Ȃ\xA2 * @return \x8C\x8B\x8D\x87\x82\xB7\x82镶\x8E\x9A\x82ւ̃|\x83C\x83\x93\x83^ * 1(\x94\xBC\x8Ap) or 2(\x91S\x8Ap) or N \x83Z\x83\x8B\x91O * \x8C\xBB\x8D݂̃Z\x83\x8B (x \x82\xAA\x8Ds\x96\x96\x82\xC5 wrap == TRUE \x8E\x9E) @@ -2826,13 +2827,11 @@ Attr.Attr |= AttrLineContinued; } - // \x8C\x8B\x8D\x87\x95\xB6\x8E\x9A? + // \x8C\x8B\x8D\x87\x95\xB6\x8E\x9A or 1\x82O\x82̕\xB6\x8E\x9A\x82̉e\x8B\xBF\x82Ō\x8B\x8D\x87\x82\xB7\x82\xE9? combining_type = 0; p = IsCombiningChar(CursorX, CursorY, Wrap, u32, &combining_type); if (p != NULL || combining_type != 0) { // \x8C\x8B\x8D\x87\x82\xB7\x82\xE9 - const BOOL spacing_mark = combining_type == 2 ? TRUE : FALSE; - move_x = 0; // \x83J\x81[\x83\\x83\x8B\x88ړ\xAE\x97\xCA=0 if (p == NULL) { @@ -2844,15 +2843,14 @@ move_x = 1; // \x83J\x81[\x83\\x83\x8B\x88ړ\xAE\x97\xCA=1 } - // \x91O\x82̕\xB6\x8E\x9A\x82ɂ\xAD\x82\xC1\x82\xAF\x82\xE9 - BuffAddChar(p, u32); - - if (spacing_mark) { + // \x93\xFC\x97͕\xB6\x8E\x9A\x82́ANonspacing mark \x88ȊO? + // \x83J\x81[\x83\\x83\x8B\x82\xF0+1, \x95\xB6\x8E\x9A\x95\x9D\x82\xF0+1\x82\xB7\x82\xE9 + if (p->u32_last != 0x200d && combining_type != 1) { // \x83J\x81[\x83\\x83\x8B\x88ړ\xAE\x97ʂ\xCD1 move_x = 1; p->cell++; - StrChangeCount++; + StrChangeCount++; // \x8Dĕ`\x89\xE6\x94͈͂\xF01cell\x91\x9D\x82₷ // \x83J\x81[\x83\\x83\x8B\x88ʒu\x82̕\xB6\x8E\x9A\x82\xCD padding\x82ɂ\xB7\x82\xE9 BuffSetChar(&CodeLineW[CursorX], 0, 'H'); @@ -2863,6 +2861,9 @@ CodeLineW[CursorX].bg = Attr.Back; } + // \x91O\x82̕\xB6\x8E\x9A\x82ɂ\xAD\x82\xC1\x82\xAF\x82\xE9 + BuffAddChar(p, u32); + // \x95\xB6\x8E\x9A\x95`\x89\xE6 if (StrChangeCount == 0) { // \x95`\x89\xE6\x97\\x92肪\x82Ȃ\xA2(StrChangeCount==0)\x82̂ɁA Modified: trunk/tests/unicodebuf-combining-spacing_mark.pl =================================================================== --- trunk/tests/unicodebuf-combining-spacing_mark.pl 2022-10-15 14:39:23 UTC (rev 10318) +++ trunk/tests/unicodebuf-combining-spacing_mark.pl 2022-10-16 05:36:52 UTC (rev 10319) @@ -20,7 +20,7 @@ print "\N{U+0d28}| U+0d28 1cell\n"; print "\N{U+0d2e}| U+0d2e 1cell\n"; -print "\N{U+0d38}\N{U+0d4d}\N{U+0d15}\N{U+0d3e}| U+0d38 U+0d4d(Nonspacing Mark) U+0d15 U+0d3e(Spacing Mark) 2cell??\n"; +print "\N{U+0d38}\N{U+0d4d}\N{U+0d15}\N{U+0d3e}| U+0d38 U+0d4d(Nonspacing Mark) U+0d15 U+0d3e(Spacing Mark) 3cell\n"; print "\N{U+0d30}\N{U+0d02}| U+0d30 U+0d02(Spacing Mark) 2cell\n"; print "\n"; @@ -38,3 +38,33 @@ print "\N{U+0d02}"; } print "| U+0d33 + U+0d02 * 10 11cell\n"; +print "\n"; + +# virama +print "Virama test\n"; + +# Devanagari +# wget https://raw.githubusercontent.com/emacs-mirror/emacs/master/etc/HELLO -O - --quiet | grep Devanagari +# name prop width +print "\N{U+0938}"; # DEVANAGARI LETTER SA +1 +print "\N{U+094d}"; # DEVANAGARI SIGN VIRAMA Virama +0 +print "\N{U+0924}"; # DEVANAGARI LETTER TA +1 +print "\N{U+0947}"; # DEVANAGARI VOWEL SIGN E Nonspacing mark +0 +print "| 2cell\n"; + +# Gujarati +# wget https://raw.githubusercontent.com/emacs-mirror/emacs/master/etc/HELLO -O - --quiet | grep Gujarati +# name prop width +print "\N{U+0ab8}"; # GUJARATI LETTER SA +1 +print "\N{U+0acd}"; # GUJARATI SIGN VIRAMA Virama +0 +print "\N{U+0aa4}"; # GUJARATI LETTER TA +1 +print "\N{U+0ac7}"; # GUJARATI VOWEL SIGN E Nonspacing mark +0 +print "| 2cell\n"; + +# Tamil +# wget https://raw.githubusercontent.com/emacs-mirror/emacs/master/etc/HELLO -O - --quiet | grep Tamil +# name prop width +print "\N{U+0bb4}"; # TAMIL LETTER LLLA +1 +print "\N{U+0bcd}"; # TAMIL SIGN VIRAMA Virama +0 +print "\N{U+0029}"; # RIGHT PARENTHESIS +1 +print "| 2cell\n";