このページは過去に掲載していたものをそのまま使用しています。
稲地@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);