[ttssh2-commit] [10319] Viramaの次の文字分文字幅を増やすようにした

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2022年 10月 16日 (日) 14:36:52 JST


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\x82‘O\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";


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