[Kazehakase-devel 2146] Re: 要望 : 「タイトルとリンクをコピー」の機能拡張

Back to archive index

Kazuhiro NISHIYAMA zn****@mbf*****
2005年 4月 28日 (木) 18:47:57 JST


西山和広です。

>>>>> On Tue, 26 Apr 2005 09:57:51 +0900
>>>>> poinc****@ikezo*****(Hiroyuki Ikezoe)  said:
> 3は別になくてもいいかなと思ったんですが、なんとなくつけてしまいました。
> 
> あと、「%」は「%%」っていうか表記で使えるようにした方がよさげなので、ま
> たまたパッチを送ってもらえるのを待ってます。
> 
> #  今年はふりょさんの力を搾取しまくるつもり

* t%t%t -> TitleTitleTitle
* %test% -> Title
などのバグっぽい動作を見つけたので、直していたら、
結局状態を導入しないとうまくいかないような気がして
しまったので、ついでに「%%」も対応してみました。


-- 
|ZnZ(ゼット エヌ ゼット)
|西山和広(Kazuhiro NISHIYAMA)
-------------- next part --------------
Index: src/actions/kz-actions.c
===================================================================
RCS file: /cvsroot/kazehakase/kazehakase/src/actions/kz-actions.c,v
retrieving revision 1.196
diff -u -p -r1.196 kz-actions.c
--- src/actions/kz-actions.c	26 Apr 2005 01:07:01 -0000	1.196
+++ src/actions/kz-actions.c	28 Apr 2005 09:42:16 -0000
@@ -895,21 +895,63 @@ act_copy_in_user_format(GtkAction *actio
 	{
 		gchar **temp = g_alloca(sizeof(gchar*) * (counts + 1));
 		splited = g_strsplit(format , "%" , counts);
+		gint st = 0;
 
-		for(i = 0;i < counts;i++)
+		for(i = 0; i < counts-1; i++)
 		{
-			if(splited[i][0] == 't')
+			if(st == 0)
+			{
+				/* first state */
+				temp[i] = splited[i];
+				st = 1;
+			}
+			else if (st == 2)
+			{
+				/* after %t% and so on */
+				temp[i] = splited[i];
+				st = 1;
+			}
+			else if (splited[i][0] == '\0')
+			{
+				/* "%%" */
+				temp[i] = "%";
+				st = 0;
+			}
+			else if (splited[i][1] != '\0')
+			{
+				/* %text% */
+				temp[i] = splited[i];
+				st = 1;
+			}
+			else if(splited[i][0] == 't')
+			{
+				/* %t% */
 				temp[i] = (gchar*)kz_embed_get_title(KZ_EMBED(widget));
+				st = 2;
+			}
 			else if(splited[i][0] == 'u')
+			{
+				/* %u% */
 				temp[i] = (gchar*)kz_embed_get_location(KZ_EMBED(widget));
+				st = 2;
+			}
 			else if(splited[i][0] == 's')
+			{
+				/* %s% */
 				temp[i] = text;
+				st = 2;
+			}
 			else
+			{
+				/* '%' + other char + '%' */
 				temp[i] = splited[i];
+				st = 1;
+			}
 		}
+		temp[counts-1] = splited[counts-1];
 		temp[counts] = NULL;
 
-		str = g_strjoinv(NULL , temp);
+		str = g_strjoinv(NULL, temp);
 		g_strfreev(splited);
 	}
 	else
@@ -921,7 +963,7 @@ act_copy_in_user_format(GtkAction *actio
 
 	gtkutil_copy_text(str);
 
-	if(str)	g_free(str);
+	if(str) g_free(str);
 	if(text) g_free(text);
 }


Kazehakase-devel メーリングリストの案内
Back to archive index