このページは過去に掲載していたものをそのまま使用しています。

ステレオタイプの描画を改善するパッチ

稲地@NECさんが送ってくださった クラス図におけるステレオタイプの描画を改善するパッチです。

問題点

ステレオタイプを表わす文字列は、"<<"と">>"で 囲まれて表示されなければいけません。 Diaではこれをascii文字に属さないlatin-1コード(#171, #187)を使って 行なっています。このためにロカール(locale)を"ja_JP.EUC"など としていると、日本語の文字セットにはなく、かつEUC文字として評価するために 表示全体が崩れてしまいます。

これを回避するために、"#171"と"#187"というコードをascii文字の "<<"と">>"に置き換えています。

解決方法

以下に稲地さんが送ってくださった差分ファイルをそのまま載せます。

--- dia-0.83/objects/UML/uml.h.stype	Thu Jun  3 19:12:04 1999
+++ dia-0.83/objects/UML/uml.h	Thu Jan 27 10:12:17 2000
@@ -77,8 +77,8 @@
 };
 
 /* Characters used to start/end stereotypes: */
-#define UML_STEREOTYPE_START ((char) 171)
-#define UML_STEREOTYPE_END ((char) 187)
+#define UML_STEREOTYPE_START "<<"
+#define UML_STEREOTYPE_END ">>"
 
 extern char *uml_get_attribute_string(UMLAttribute *attribute);
 extern char *uml_get_operation_string(UMLOperation *operation);
--- dia-0.83/objects/UML/class.c.stype	Thu Jan 27 09:40:12 2000
+++ dia-0.83/objects/UML/class.c	Thu Jan 27 10:14:43 2000
@@ -435,16 +435,11 @@
   if (umlclass->stereotype != NULL) {
     umlclass->namebox_height += font_height;
     umlclass->stereotype_string =
-      g_malloc(sizeof(char)*(strlen(umlclass->stereotype)+2+1));
-    
-    umlclass->stereotype_string[0] = UML_STEREOTYPE_START;
-    umlclass->stereotype_string[1] = 0;
+      g_malloc(sizeof(char)*(strlen(umlclass->stereotype)+4+1));
     
+    strcpy(umlclass->stereotype_string, UML_STEREOTYPE_START);
     strcat(umlclass->stereotype_string, umlclass->stereotype);
-
-    i = strlen(umlclass->stereotype_string);
-    umlclass->stereotype_string[i] = UML_STEREOTYPE_END;
-    umlclass->stereotype_string[i+1] = 0;
+    strcat(umlclass->stereotype_string, UML_STEREOTYPE_END);
 
     width = font_string_width(umlclass->stereotype_string, umlclass->normal_font, font_height);
     maxwidth = MAX(width, maxwidth);

Yasuhiro Abe <yasu@europa.u-aizu.ac.jp>
Last modified: Sat Feb 19 03:50:35 2000