Only in dia-0.83-6/: a.eps
diff -ur dia-0.83-0/app/Makefile.in dia-0.83-6/app/Makefile.in
--- dia-0.83-0/app/Makefile.in	Fri Dec 24 23:23:39 1999
+++ dia-0.83-6/app/Makefile.in	Mon Feb 14 03:27:18 2000
@@ -136,7 +136,7 @@
 PROGRAMS =  $(bin_PROGRAMS) $(noinst_PROGRAMS)
 
 
-DEFS = @DEFS@ -I. -I$(srcdir) -I..
+DEFS = @DEFS@ -I. -I$(srcdir) -I.. -DUSE_XIM
 LIBS = @LIBS@
 @HAVE_GNOME_PRINT_TRUE@dia_OBJECTS =  connectionpoint_ops.o diagram.o \
 @HAVE_GNOME_PRINT_TRUE@commands.o app_procs.o preferences.o load_save.o \
diff -ur dia-0.83-0/app/disp_callbacks.c dia-0.83-6/app/disp_callbacks.c
--- dia-0.83-0/app/disp_callbacks.c	Mon Nov  1 10:00:58 1999
+++ dia-0.83-6/app/disp_callbacks.c	Mon Feb 14 03:27:19 2000
@@ -38,6 +38,63 @@
 /* This contains the point that was clicked to get this menu */
 static Point object_menu_clicked_point;
 
+#ifdef USE_XIM
+void create_input_dialog (DDisplay *ddisp) {
+  if (gdk_im_ready () && (ddisp->ic_attr = gdk_ic_attr_new ()) != NULL) {
+    gint width, height;
+    GdkColormap *colormap;
+    GdkEventMask mask;
+    GdkICAttr *attr = ddisp->ic_attr;
+    GdkICAttributesType attrmask = GDK_IC_ALL_REQ;
+    GdkIMStyle style;
+    GdkIMStyle supported_style = GDK_IM_PREEDIT_NONE | GDK_IM_PREEDIT_NOTHING |
+	                           GDK_IM_PREEDIT_POSITION | GDK_IM_STATUS_NONE |
+	                           GDK_IM_STATUS_NOTHING;
+    if(ddisp->canvas->style && ddisp->canvas->style->font->type != GDK_FONT_FONTSET)
+      supported_style &= ~GDK_IM_PREEDIT_POSITION;
+    attr->style = style = gdk_im_decide_style (supported_style);
+    attr->client_window = ddisp->canvas->window;
+    if((colormap = gtk_widget_get_colormap (ddisp->canvas)) != gtk_widget_get_default_colormap ()) {
+      attrmask |= GDK_IC_PREEDIT_COLORMAP;
+      attr->preedit_colormap = colormap;
+    }
+    switch (style & GDK_IM_PREEDIT_MASK) {
+    case GDK_IM_PREEDIT_POSITION:
+      if(ddisp->canvas->style && ddisp->canvas->style->font->type != GDK_FONT_FONTSET) {
+        g_warning ("���ʴ����Ѵ��Υե���Ȥ������Ǥ��ޤ���Ǥ�����");
+        break;
+      }
+      attrmask |= GDK_IC_PREEDIT_POSITION_REQ;
+      gdk_window_get_size (ddisp->canvas->window, &width, &height);
+      attr->spot_location.x = 0;
+      attr->spot_location.y = 14;
+      attr->preedit_area.x = 0;
+      attr->preedit_area.y = 0;
+      attr->preedit_area.width = width;
+      attr->preedit_area.height = height;
+      attr->preedit_fontset = ddisp->canvas->style->font;
+      break;
+    }
+    ddisp->ic = gdk_ic_new (attr, attrmask);
+    if(ddisp->ic == NULL) g_warning ("���ʴ����Ѵ������ѤǤ��ޤ���");
+    else {
+      mask = gdk_window_get_events (ddisp->canvas->window);
+      mask |= gdk_ic_get_events(ddisp->ic);
+      gdk_window_set_events (ddisp->canvas->window, mask);
+      gdk_im_begin(ddisp->ic, ddisp->canvas->window);
+    }
+  }
+}
+
+void set_input_dialog(DDisplay *ddisp, int x, int y) {
+  if(ddisp->ic && (gdk_ic_get_style(ddisp->ic) & GDK_IM_PREEDIT_POSITION)) {
+    ddisp->ic_attr->spot_location.x = x;
+    ddisp->ic_attr->spot_location.y = y;
+    gdk_ic_set_attr (ddisp->ic, ddisp->ic_attr, GDK_IC_SPOT_LOCATION);
+  }
+}
+#endif
+
 static void
 object_menu_proxy(GtkWidget *widget, gpointer data)
 {
@@ -194,6 +251,7 @@
   int width, height;
   int new_size;
   int modified;
+  int x, y;
 
   return_val = FALSE;
  
@@ -232,8 +290,12 @@
 	ddisplay_update_scrollbars(ddisp);
       }
       break;
-
+    
     case GDK_FOCUS_CHANGE:
+#ifdef USE_XIM
+        if(ddisp->ic == NULL)
+          create_input_dialog (ddisp);
+#endif
       diagram_update_menu_sensitivity(ddisp->diagram);
       break;
       
@@ -333,8 +395,14 @@
 	obj = focus->obj;
 	if (diagram_is_selected(ddisp->diagram, obj)) {
 	  ObjectChange *obj_change = NULL;
-	
+
 	  object_add_updates(obj, ddisp->diagram);
+
+#ifdef USE_XIM
+          ddisplay_transform_coords(ddisp, obj->position.x, obj->position.y, &x, &y);
+          set_input_dialog(ddisp, x, y);
+#endif
+
 	  modified = (focus->key_event)(focus, kevent->keyval,
 					kevent->string, kevent->length,
 					&obj_change);
@@ -437,7 +505,6 @@
 
   /*printf("delete\n");*/
   ddisp = (DDisplay *)data;
-  
   ddisplay_close(ddisp);
   return TRUE;
 }
@@ -448,12 +515,18 @@
   DDisplay *ddisp;
   
   ddisp = (DDisplay *) data;
-
-  if (popup_shell == ddisp->shell) {
-    popup_shell = NULL;
+#ifdef USE_XIM
+  if (ddisp->ic != NULL) {
+      gdk_ic_destroy (ddisp->ic);
+      ddisp->ic = NULL;
   }
-
+  if (ddisp->ic_attr) {
+      gdk_ic_attr_destroy (ddisp->ic_attr);
+      ddisp->ic_attr = NULL;
+  }
+#endif
   ddisplay_really_destroy(ddisp);
+
 }
 
 
diff -ur dia-0.83-0/app/display.c dia-0.83-6/app/display.c
--- dia-0.83-0/app/display.c	Wed Nov 24 18:15:18 1999
+++ dia-0.83-6/app/display.c	Mon Feb 14 03:27:19 2000
@@ -148,6 +148,11 @@
   g_hash_table_insert (display_ht, ddisp->shell, ddisp);
   g_hash_table_insert (display_ht, ddisp->canvas, ddisp);
 
+#ifdef USE_XIM
+  ddisp->ic = NULL;
+  ddisp->ic_attr = NULL;
+#endif
+
   return ddisp;  /*  set the user data  */
 }
 
diff -ur dia-0.83-0/app/display.h dia-0.83-6/app/display.h
--- dia-0.83-0/app/display.h	Tue Aug 24 19:31:49 1999
+++ dia-0.83-6/app/display.h	Mon Feb 14 03:27:19 2000
@@ -62,6 +62,10 @@
   
   GSList *update_areas;           /* Update areas list                 */
   GSList *display_areas;          /* Display areas list                */
+#ifdef USE_XIM
+  GdkIC     *ic;
+  GdkICAttr *ic_attr;
+#endif
 };
 
 extern GdkCursor *default_cursor;
diff -ur dia-0.83-0/app/render_eps.c dia-0.83-6/app/render_eps.c
--- dia-0.83-0/app/render_eps.c	Tue Dec 21 09:58:18 1999
+++ dia-0.83-6/app/render_eps.c	Mon Feb 14 03:27:19 2000
@@ -35,6 +35,7 @@
 static void set_dashlength(RendererEPS *renderer, real length);
 static void set_fillstyle(RendererEPS *renderer, FillStyle mode);
 static void set_font(RendererEPS *renderer, Font *font, real height);
+static void set_mbfont(RendererEPS *renderer, Font *font, real height);
 static void draw_line(RendererEPS *renderer, 
 		      Point *start, Point *end, 
 		      Color *line_color);
@@ -83,6 +84,12 @@
 			const char *text,
 			Point *pos, Alignment alignment,
 			Color *color);
+static void draw_mbstring(RendererEPS *renderer,
+			  const char *text,
+			  Point *pos, Alignment alignment,
+			  Color *color,
+			  Font *font,
+			  real height);
 static void draw_image(RendererEPS *renderer,
 		       Point *point,
 		       real width, real height,
@@ -99,6 +106,7 @@
   (SetDashLengthFunc) set_dashlength,
   (SetFillStyleFunc) set_fillstyle,
   (SetFontFunc) set_font,
+  (SetFontFunc) set_mbfont,
   
   (DrawLineFunc) draw_line,
   (DrawPolyLineFunc) draw_polyline,
@@ -119,6 +127,7 @@
   (FillBezierFunc) fill_bezier,
 
   (DrawStringFunc) draw_string,
+  (DrawMBStringFunc) draw_mbstring,
 
   (DrawImageFunc) draw_image,
 };
@@ -718,9 +727,33 @@
 static void
 set_font(RendererEPS *renderer, Font *font, real height)
 {
+  char *str;
 
-  fprintf(renderer->file, "/%s-latin1 ff %f scf sf\n",
-	  font_get_psfontname(font), (double)height);
+  str = font_get_psfontname(font)[0];
+  if(str == NULL) {
+    return;
+  }
+  if(strcmp(str, "Ryumin-Light")==0||strcmp(str, "GothicBBB-Medium")==0)
+    /* when using the EUC-JP Charset, */
+    fprintf(renderer->file, "/%s-EUC-H ff %f scf sf\n", str, (double)height);
+  else
+    fprintf(renderer->file, "/%s-latin1 ff %f scf sf\n", str, (double)height);
+}
+
+static void
+set_mbfont(RendererEPS *renderer, Font *font, real height)
+{
+  char *str;
+
+  str = font_get_psfontname(font)[1];
+  if(str == NULL) {
+    return;
+  }
+  if(strcmp(str, "Ryumin-Light")==0||strcmp(str, "GothicBBB-Medium")==0)
+    /* when using the EUC-JP Charset, */
+    fprintf(renderer->file, "/%s-EUC-H ff %f scf sf\n", str, (double)height);
+  else
+    fprintf(renderer->file, "/%s-latin1 ff %f scf sf\n", str, (double)height);
 }
 
 static void
@@ -1012,6 +1045,64 @@
   }
   
   fprintf(renderer->file, " gs 1 -1 sc sh gr\n");
+}
+
+static void
+draw_mbstring(RendererEPS *renderer,
+	      const char *text,
+	      Point *pos, Alignment alignment,
+	      Color *color,
+	      Font *font,
+	      real height)
+{
+  Point _pos;
+  int i;
+  int s;
+  char *buff;
+ 
+  _pos = *pos;
+  buff = (char *)g_malloc(sizeof(char) * strlen(text) + 1);
+  for(i=0, s=0; i<strlen(text);i++,s++) {
+    if(s==0) {
+      buff[s] = text[i];
+    } else if (text[i-1] < 0 && text[i] < 0) {
+      /* both are 16bits char */
+      buff[s] = text[i];
+    } else if (text[i-1] > 0 && text[i] > 0) {
+      /* for ASCII char */
+      buff[s] = text[i];
+    } else {
+      /* 'text->line[i][j]' is a boundary between single and double chars */
+      if (text[i-1] > 0) {
+ 	/* printing ASCII chars */
+ 	set_font(renderer, font, height);
+      } else {
+ 	/* printging 16bits chars */
+ 	set_mbfont(renderer, font, height);
+      }
+      buff[s] = '\0';
+      draw_string(renderer,
+ 		  buff,
+ 		  &_pos, alignment,
+ 		  color);
+      s = 0;
+      buff[s] = text[i];
+      _pos.x += font_string_width(buff, font, height);
+    }
+  }
+  if (text[i-1] > 0) {
+    /* printing ASCII chars */
+    set_font(renderer, font, height);
+  } else {
+    /* printging 16bits chars */
+    set_mbfont(renderer, font, height);
+  }
+  buff[s] = '\0';
+  draw_string(renderer,
+ 	      buff,
+	      &_pos, alignment,
+ 	      color);
+  g_free(buff);
 }
 
 static void
diff -ur dia-0.83-0/app/render_gdk.c dia-0.83-6/app/render_gdk.c
--- dia-0.83-0/app/render_gdk.c	Wed Oct 27 10:51:55 1999
+++ dia-0.83-6/app/render_gdk.c	Mon Feb 14 03:27:19 2000
@@ -31,6 +31,7 @@
 static void set_dashlength(RendererGdk *renderer, real length);
 static void set_fillstyle(RendererGdk *renderer, FillStyle mode);
 static void set_font(RendererGdk *renderer, Font *font, real height);
+static void set_mbfont(RendererGdk *renderer, Font *font, real height);
 static void draw_line(RendererGdk *renderer, 
 		      Point *start, Point *end, 
 		      Color *line_color);
@@ -79,6 +80,12 @@
 			const char *text,
 			Point *pos, Alignment alignment,
 			Color *color);
+static void draw_mbstring(RendererGdk *renderer,
+			  const char *text,
+			  Point *pos, Alignment alignment,
+			  Color *color,
+			  Font *font,
+			  real height);
 static void draw_image(RendererGdk *renderer,
 		       Point *point,
 		       real width, real height,
@@ -115,6 +122,7 @@
   (SetDashLengthFunc) set_dashlength,
   (SetFillStyleFunc) set_fillstyle,
   (SetFontFunc) set_font,
+  (SetFontFunc) set_mbfont,
   
   (DrawLineFunc) draw_line,
   (DrawPolyLineFunc) draw_polyline,
@@ -135,6 +143,7 @@
   (FillBezierFunc) fill_bezier,
 
   (DrawStringFunc) draw_string,
+  (DrawMBStringFunc) draw_mbstring,
 
   (DrawImageFunc) draw_image,
 };
@@ -406,6 +415,12 @@
 }
 
 static void
+set_mbfont(RendererGdk *renderer, Font *font, real height)
+{
+  set_font(renderer, font, height);
+}
+
+static void
 draw_line(RendererGdk *renderer, 
 	  Point *start, Point *end, 
 	  Color *line_color)
@@ -920,6 +935,17 @@
   gdk_draw_string(renderer->pixmap,
 		  renderer->gdk_font, gc,
 		  x,y, text);
+}
+
+static void
+draw_mbstring(RendererGdk *renderer,
+	      const char *text,
+	      Point *pos, Alignment alignment,
+	      Color *color,
+	      Font *font,
+	      real height)
+{
+  draw_string(renderer, text, pos, alignment, color);
 }
 
 static void
diff -ur dia-0.83-0/app/render_gnomeprint.c dia-0.83-6/app/render_gnomeprint.c
--- dia-0.83-0/app/render_gnomeprint.c	Mon Oct 25 14:59:43 1999
+++ dia-0.83-6/app/render_gnomeprint.c	Mon Feb 14 03:27:19 2000
@@ -39,6 +39,7 @@
 static void set_dashlength(RendererGPrint *renderer, real length);
 static void set_fillstyle(RendererGPrint *renderer, FillStyle mode);
 static void set_font(RendererGPrint *renderer, Font *font, real height);
+static void set_mbfont(RendererGPrint *renderer, Font *font, real height);
 static void draw_line(RendererGPrint *renderer, 
 		      Point *start, Point *end, 
 		      Color *line_color);
@@ -87,6 +88,12 @@
 			const char *text,
 			Point *pos, Alignment alignment,
 			Color *color);
+static void draw_mbstring(RendererGPrint *renderer,
+			  const char *text,
+			  Point *pos, Alignment alignment,
+			  Color *color,
+			  Font *font,
+			  real height);
 static void draw_image(RendererGPrint *renderer,
 		       Point *point,
 		       real width, real height,
@@ -103,6 +110,7 @@
   (SetDashLengthFunc) set_dashlength,
   (SetFillStyleFunc) set_fillstyle,
   (SetFontFunc) set_font,
+  (SetFontFunc) set_mbfont,
   
   (DrawLineFunc) draw_line,
   (DrawPolyLineFunc) draw_polyline,
@@ -123,6 +131,7 @@
   (FillBezierFunc) fill_bezier,
 
   (DrawStringFunc) draw_string,
+  (DrawMBStringFunc) draw_mbstring,
 
   (DrawImageFunc) draw_image,
 };
@@ -298,6 +307,12 @@
 }
 
 static void
+set_mbfont(RendererGPrint *renderer, Font *font, real height)
+{
+  set_font(renderer, font, height);
+}
+
+static void
 draw_line(RendererGPrint *renderer, 
 	  Point *start, Point *end, 
 	  Color *line_color)
@@ -673,6 +688,17 @@
   gnome_print_scale(renderer->ctx, 1, -1);
   gnome_print_show(renderer->ctx, text);
   gnome_print_grestore(renderer->ctx);
+}
+
+static void
+draw_mbstring(RendererGPrint *renderer,
+	      const char *text,
+	      Point *pos, Alignment alignment,
+	      Color *color,
+	      Font *font,
+	      real height)
+{
+  draw_string(renderer, text, pos, alignment, color);
 }
 
 static void
diff -ur dia-0.83-0/app/render_svg.c dia-0.83-6/app/render_svg.c
--- dia-0.83-0/app/render_svg.c	Fri Dec 24 22:23:35 1999
+++ dia-0.83-6/app/render_svg.c	Mon Feb 14 03:27:19 2000
@@ -40,6 +40,7 @@
 static void set_dashlength(RendererSVG *renderer, real length);
 static void set_fillstyle(RendererSVG *renderer, FillStyle mode);
 static void set_font(RendererSVG *renderer, Font *font, real height);
+static void set_mbfont(RendererSVG *renderer, Font *font, real height);
 static void draw_line(RendererSVG *renderer, 
 		      Point *start, Point *end, 
 		      Color *line_colour);
@@ -88,6 +89,12 @@
 			const char *text,
 			Point *pos, Alignment alignment,
 			Color *colour);
+static void draw_mbstring(RendererSVG *renderer,
+			  const char *text,
+			  Point *pos, Alignment alignment,
+			  Color *colour,
+			  Font *font,
+			  real height);
 static void draw_image(RendererSVG *renderer,
 		       Point *point,
 		       real width, real height,
@@ -104,6 +111,7 @@
   (SetDashLengthFunc) set_dashlength,
   (SetFillStyleFunc) set_fillstyle,
   (SetFontFunc) set_font,
+  (SetFontFunc) set_mbfont,
   
   (DrawLineFunc) draw_line,
   (DrawPolyLineFunc) draw_polyline,
@@ -124,6 +132,7 @@
   (FillBezierFunc) fill_bezier,
 
   (DrawStringFunc) draw_string,
+  (DrawMBStringFunc) draw_mbstring,
 
   (DrawImageFunc) draw_image,
 };
@@ -353,6 +362,12 @@
   */
 }
 
+static void
+set_mbfont(RendererSVG *renderer, Font *font, real height)
+{
+  set_font(renderer, font, height);
+}
+
 /* the return value of this function should not be saved anywhere */
 static gchar *
 get_draw_style(RendererSVG *renderer,
@@ -743,6 +758,17 @@
   xmlSetProp(node, "x", buf);
   g_snprintf(buf, sizeof(buf), "%g", pos->y);
   xmlSetProp(node, "y", buf);
+}
+
+static void
+draw_mbstring(RendererSVG *renderer,
+	      const char *text,
+	      Point *pos, Alignment alignment,
+	      Color *colour,
+	      Font *fonr,
+	      real height)
+{
+  draw_string(renderer, text, pos, alignment, colour);
 }
 
 static void
Only in dia-0.83-0/intl: libintl.h
diff -ur dia-0.83-0/lib/font.c dia-0.83-6/lib/font.c
--- dia-0.83-0/lib/font.c	Fri Dec 24 10:39:54 1999
+++ dia-0.83-6/lib/font.c	Mon Feb 14 16:27:34 2000
@@ -52,6 +52,8 @@
 
 #define NUM_X11_FONTS 2
 
+#define NUM_PS_FONTS 2
+
 typedef struct _FontPrivate FontPrivate;
 typedef struct  _FontCacheItem FontCacheItem;
 
@@ -64,7 +66,7 @@
   Font public;
   char *fontname_x11;
   char **fontname_x11_vec;
-  char *fontname_ps;
+  char *fontname_ps[NUM_PS_FONTS];
   FontCacheItem *cache[FONTCACHE_SIZE];
   real ascent_ratio, descent_ratio;
 };
@@ -72,218 +74,225 @@
 
 typedef struct _FontData {
   char *fontname;
-  char *fontname_ps;
+  char *fontname_ps[NUM_PS_FONTS];
   char *fontname_x11[NUM_X11_FONTS]; /* First choice */
 } FontData;
 
 FontData font_data[] = {
+  { "��ī",
+    { "Times-Roman", "Ryumin-Light" },
+    { "-adobe-times-medium-r-normal-*-%d-*-*-*-*-*-*-*,-ricoh-hg mincho l-medium-r-normal-*-%d-*-*-*-*-*-*-*",
+      "-adobe-times-medium-r-normal-*-%d-*-*-*-*-*-*-*,-*-mincho-medium-r-normal-*-%d-*-*-*-*-*-*-*"
+    }
+  },
   { "Times-Roman",
-    "Times-Roman",
-    { "-adobe-times-medium-r-normal-*-%d-*-*-*-*-*-*-*",
-      NULL
+    { "Times-Roman", "Ryumin-Light" },
+    { "-adobe-times-medium-r-normal-*-%d-*-*-*-*-*-*-*,-ricoh-hg mincho l-medium-r-normal-*-%d-*-*-*-*-*-*-*",
+      "-adobe-times-medium-r-normal-*-%d-*-*-*-*-*-*-*,-*-mincho-medium-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   }, 
   { "Times-Italic",
-    "Times-Italic",
-    { "-adobe-times-medium-i-normal-*-%d-*-*-*-*-*-*-*",
-      NULL
+    { "Times-Italic", "Ryumin-Light" },
+    { "-adobe-times-medium-i-normal-*-%d-*-*-*-*-*-*-*,-*-mincho-medium-i-*-*-%d-*-*-*-*-*-*-*",
+      "-adobe-times-medium-i-normal-*-%d-*-*-*-*-*-*-*,-*-fixed-medium-i-normal-*-%d-*-*-*-*-*-*-*"
     }
   }, 
   { "Times-Bold",
-    "Times-Bold",
-    { "-adobe-times-bold-r-normal-*-%d-*-*-*-*-*-*-*",
-      NULL
+    { "Times-Bold", "GothicBBB-Medium" },
+    { "-adobe-times-bold-r-normal-*-%d-*-*-*-*-*-*-*,-morisawa-gothic medium bbb-bold-r-normal-*-%d-*-*-*-*-*-*-*",
+      "-adobe-times-bold-r-normal-*-%d-*-*-*-*-*-*-*,-*-fixed-bold-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   }, 
   { "Times-BoldItalic",
-    "Times-BoldItalic",
-    { "-adobe-times-bold-i-normal-*-%d-*-*-*-*-*-*-*",
-      NULL
+    { "Times-BoldItalic", "GothicBBB-Medium" },
+    { "-adobe-times-bold-i-normal-*-%d-*-*-*-*-*-*-*,-morisawa-gothic medium bbb-bold-r-normal-*-%d-*-*-*-*-*-*-*",
+      "-adobe-times-bold-i-normal-*-%d-*-*-*-*-*-*-*,-*-fixed-bold-i-normal-*-%d-*-*-*-*-*-*-*"
     }
   }, 
   { "AvantGarde-Book",
-    "AvantGarde-Book",
+    { "AvantGarde-Book", NULL },
     { "-adobe-avantgarde-book-r-normal-*-%d-*-*-*-*-*-*-*",
       "-schumacher-clean-medium-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "AvantGarde-BookOblique",
-    "AvantGarde-BookOblique",
+    { "AvantGarde-BookOblique", NULL },
     { "-adobe-avantgarde-book-o-normal-*-%d-*-*-*-*-*-*-*",
       "-schumacher-clean-medium-i-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "AvantGarde-Demi",
-    "AvantGarde-Demi",
+    { "AvantGarde-Demi", NULL },
     { "-adobe-avantgarde-demibold-r-normal-*-%d-*-*-*-*-*-*-*",
       "-schumacher-clean-bold-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "AvantGarde-DemiOblique",
-    "AvantGarde-DemiOblique",
+    { "AvantGarde-DemiOblique", NULL },
     { "-adobe-avantgarde-demibold-o-normal-*-%d-*-*-*-*-*-*-*",
       "-schumacher-clean-bold-i-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "Bookman-Light",
-    "Bookman-Light",
+    { "Bookman-Light", NULL },
     { "-adobe-bookman-light-r-normal-*-%d-*-*-*-*-*-*-*",
       "-adobe-times-medium-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "Bookman-LightItalic",
-    "Bookman-LightItalic",
+    { "Bookman-LightItalic", NULL },
     { "-adobe-bookman-light-i-normal-*-%d-*-*-*-*-*-*-*",
       "-adobe-times-medium-i-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "Bookman-Demi",
-    "Bookman-Demi",
+    { "Bookman-Demi", NULL },
     { "-adobe-bookman-demibold-r-normal-*-%d-*-*-*-*-*-*-*",
       "-adobe-times-bold-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "Bookman-DemiItalic",
-    "Bookman-DemiItalic",
+    { "Bookman-DemiItalic", NULL },
     { "-adobe-bookman-demibold-i-normal-*-%d-*-*-*-*-*-*-*",
       "-adobe-times-bold-i-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "Courier",
-    "Courier",
-    { "-adobe-courier-medium-r-normal-*-%d-*-*-*-*-*-*-*",
-      NULL
+    { "Courier", "Ryumin-Light" },
+    { 
+      "-adobe-courier-medium-r-normal-*-%d-*-*-*-*-*-*-*,-ricoh-hg mincho l-medium-r-normal-*-%d-*-*-*-*-*-*-*",
+      "-adobe-courier-medium-r-normal-*-%d-*-*-*-*-*-*-*,-*-mincho-medium-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "Courier-Oblique",
-    "Courier-Oblique",
-    { "-adobe-courier-medium-o-normal-*-%d-*-*-*-*-*-*-*",
-      NULL
+    { "Courier-Oblique", "Ryumin-Light" },
+    { "-adobe-courier-medium-r-normal-*-%d-*-*-*-*-*-*-*,-ricoh-hg mincho l-medium-r-normal-*-%d-*-*-*-*-*-*-*",
+      "-adobe-courier-medium-o-normal-*-%d-*-*-*-*-*-*-*,-*-mincho-medium-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "Courier-Bold",
-    "Courier-Bold",
-    { "-adobe-courier-bold-r-normal-*-%d-*-*-*-*-*-*-*",
-      NULL
+    { "Courier-Bold", "GothicBBB-Medium" },
+    { "-adobe-courier-bold-r-normal-*-%d-*-*-*-*-*-*-*,-morisawa-gothic medium bbb-bold-r-normal-*-%d-*-*-*-*-*-*-*",
+      "-adobe-courier-bold-r-normal-*-%d-*-*-*-*-*-*-*,-*-mincho-bold-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "Courier-BoldOblique",
-    "Courier-BoldOblique",
-    { "-adobe-courier-bold-o-normal-*-%d-*-*-*-*-*-*-*",
-      NULL
+    { "Courier-BoldOblique", "GothicBBB-Medium" },
+    { "-adobe-courier-bold-o-normal-*-%d-*-*-*-*-*-*-*,-morisawa-gothic medium bbb-bold-r-normal-*-%d-*-*-*-*-*-*-*",
+      "-adobe-courier-bold-o-normal-*-%d-*-*-*-*-*-*-*,-*-mincho-bold-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "Helvetica",
-    "Helvetica",
-    { "-adobe-helvetica-medium-r-normal-*-%d-*-*-*-*-*-*-*",
-      NULL
+    { "Helvetica", "Ryumin-Light" },
+    { "-adobe-helvetica-medium-r-normal-*-%d-*-*-*-*-*-*-*,-ricoh-hg mincho l-medium-r-normal-*-%d-*-*-*-*-*-*-*",
+      "-adobe-helvetica-medium-r-normal-*-%d-*-*-*-*-*-*-*,-*-mincho-medium-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "Helvetica-Oblique",
-    "Helvetica-Oblique",
-    { "-adobe-helvetica-medium-o-normal-*-%d-*-*-*-*-*-*-*",
-      NULL
+    { "Helvetica-Oblique", "Ryumin-Light" },
+    { "-adobe-helvetica-medium-o-normal-*-%d-*-*-*-*-*-*-*,-ricoh-hg mincho l-medium-r-normal-*-%d-*-*-*-*-*-*-*",
+      "-adobe-helvetica-medium-o-normal-*-%d-*-*-*-*-*-*-*,-*-mincho-medium-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "Helvetica-Bold",
-    "Helvetica-Bold",
-    { "-adobe-helvetica-bold-r-normal-*-%d-*-*-*-*-*-*-*",
-      NULL
+    { "Helvetica-Bold", "GothicBBB-Medium" },
+    { "-adobe-helvetica-bold-r-normal-*-%d-*-*-*-*-*-*-*,-morisawa-gothic medium bbb-bold-r-normal-*-%d-*-*-*-*-*-*-*",
+      "-adobe-helvetica-bold-r-normal-*-%d-*-*-*-*-*-*-*,-*-mincho-bold-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "Helvetica-BoldOblique",
-    "Helvetica-BoldOblique",
-    { "-adobe-helvetica-bold-o-normal-*-%d-*-*-*-*-*-*-*",
-      NULL
+    { "Helvetica-BoldOblique", "GothicBBB-Medium" },
+    { "-adobe-helvetica-bold-o-normal-*-%d-*-*-*-*-*-*-*,-morisawa-gothic medium bbb-bold-r-normal-*-%d-*-*-*-*-*-*-*",
+      "-adobe-helvetica-bold-o-normal-*-%d-*-*-*-*-*-*-*,-*-mincho-bold-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "Helvetica-Narrow",
-    "Helvetica-Narrow",
-    { "-adobe-helvetica-medium-r-normal-*-%d-*-*-*-*-*-*-*",
-      NULL
+    { "Helvetica-Narrow", "Ryumin-Light" },
+    { "-adobe-helvetica-medium-r-normal-*-%d-*-*-*-*-*-*-*,-ricoh-hg mincho l-medium-r-normal-*-%d-*-*-*-*-*-*-*",
+      "-adobe-helvetica-medium-r-normal-*-%d-*-*-*-*-*-*-*,-*-mincho-medium-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "Helvetica-Narrow-Oblique",
-    "Helvetica-Narrow-Oblique",
-    { "-adobe-helvetica-medium-o-normal-*-%d-*-*-*-*-*-*-*",
-      NULL
+    { "Helvetica-Narrow-Oblique", "Ryumin-Light" },
+    { "-adobe-helvetica-medium-o-normal-*-%d-*-*-*-*-*-*-*,-ricoh-hg mincho l-medium-r-normal-*-%d-*-*-*-*-*-*-*",
+      "-adobe-helvetica-medium-o-normal-*-%d-*-*-*-*-*-*-*,-*-mincho-medium-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "Helvetica-Narrow-Bold",
-    "Helvetica-Narrow-Bold",
-    { "-adobe-helvetica-bold-r-normal-*-%d-*-*-*-*-*-*-*",
-      NULL
+    { "Helvetica-Narrow-Bold", "GothicBBB-Medium" },
+    { "-adobe-helvetica-bold-r-normal-*-%d-*-*-*-*-*-*-*,-morisawa-gothic medium bbb-bold-r-normal-*-%d-*-*-*-*-*-*-*",
+      "-adobe-helvetica-bold-r-normal-*-%d-*-*-*-*-*-*-*,-*-mincho-bold-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "Helvetica-Narrow-BoldOblique",
-    "Helvetica-Narrow-BoldOblique",
-    { "-adobe-helvetica-bold-o-normal-*-%d-*-*-*-*-*-*-*",
-      NULL
+    { "Helvetica-Narrow-BoldOblique", "GothicBBB-Medium" },
+    { "-adobe-helvetica-bold-o-normal-*-%d-*-*-*-*-*-*-*,-morisawa-gothic medium bbb-bold-r-normal-*-%d-*-*-*-*-*-*-*",
+      "-adobe-helvetica-bold-o-normal-*-%d-*-*-*-*-*-*-*,-*-mincho-bold-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "NewCenturySchoolbook-Roman",
-    "NewCenturySchlbk-Roman",
+    { "NewCenturySchlbk-Roman", NULL },
     { "-adobe-new century schoolbook-medium-r-normal-*-%d-*-*-*-*-*-*-*",
       NULL
     }
   },
   { "NewCenturySchoolbook-Italic",
-    "NewCenturySchlbk-Italic",
+    { "NewCenturySchlbk-Italic", NULL },
     { "-adobe-new century schoolbook-medium-i-normal-*-%d-*-*-*-*-*-*-*",
       NULL
     }
   },
   { "NewCenturySchoolbook-Bold",
-    "NewCenturySchlbk-Bold",
+    { "NewCenturySchlbk-Bold", NULL },
     { "-adobe-new century schoolbook-bold-r-normal-*-%d-*-*-*-*-*-*-*",
       NULL
     }
   },
   { "NewCenturySchoolbook-BoldItalic",
-    "NewCenturySchlbk-BoldItalic",
+    { "NewCenturySchlbk-BoldItalic", NULL },
     { "-adobe-new century schoolbook-bold-i-normal-*-%d-*-*-*-*-*-*-*",
       NULL
     }
   },
   { "Palatino-Roman",
-    "Palatino-Roman",
+    { "Palatino-Roman", NULL },
     { "-adobe-palatino-medium-r-normal-*-%d-*-*-*-*-*-*-*",
       "-*-lucidabright-medium-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "Palatino-Italic",
-    "Palatino-Italic",
+    { "Palatino-Italic", NULL },
     { "-adobe-palatino-medium-i-normal-*-%d-*-*-*-*-*-*-*",
       "-*-lucidabright-medium-i-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "Palatino-Bold",
-    "Palatino-Bold",
+    { "Palatino-Bold", NULL },
     { "-adobe-palatino-bold-r-normal-*-%d-*-*-*-*-*-*-*",
       "-*-lucidabright-demibold-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "Palatino-BoldItalic",
-    "Palatino-BoldItalic",
+    { "Palatino-BoldItalic", NULL },
     { "-adobe-palatino-bold-i-normal-*-%d-*-*-*-*-*-*-*",
       "-*-lucidabright-demibold-i-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "Symbol",
-    "Symbol",
+    { "Symbol", NULL },
     {
       "-adobe-symbol-medium-r-normal-*-%d-*-*-*-*-*-*-*",
       "-*-symbol-medium-r-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "ZapfChancery-MediumItalic",
-    "ZapfChancery-MediumItalic",
+    { "ZapfChancery-MediumItalic", NULL },
     { "-adobe-zapf chancery-medium-i-normal-*-%d-*-*-*-*-*-*-*",
       "-*-itc zapf chancery-medium-i-normal-*-%d-*-*-*-*-*-*-*"
     }
   },
   { "ZapfDingbats",
-    "ZapfDingbats",
+    { "ZapfDingbats", NULL },
     { "-adobe-zapf dingbats-medium-r-normal-*-%d-*-*-*-*-*-*-*",
       "-*-itc zapf dingbats-*-*-*-*-%d-*-*-*-*-*-*-*"
     }
@@ -297,7 +306,7 @@
 GHashTable *fonts_hash = NULL;
 
 char *last_resort_fonts[] = {
-  "-adobe-courier-medium-r-normal-*-%d-*-*-*-*-*-*-*",
+  "-ricoh-hg mincho l-medium-r-normal-*-%d-*-*-*-*-*-*-*",
   "fixed" /* Must be last. This is guaranteed to exist on an X11 system. */
 };
 #define NUM_LAST_RESORT_FONTS (sizeof(last_resort_fonts)/sizeof(char *))
@@ -319,9 +328,9 @@
       break;
     bufsize = strlen(x11_font)+6;  /* Should be enought*/
     buffer = (char *)g_malloc(bufsize);
-    g_snprintf(buffer, bufsize, x11_font, 100);
+    g_snprintf(buffer, bufsize, x11_font, 100, 100);
     
-    gdk_font = gdk_font_load(buffer);
+    gdk_font = gdk_fontset_load(buffer);
     if (gdk_font!=NULL) {
       font->fontname_x11 = x11_font;
     }
@@ -336,9 +345,9 @@
       x11_font = last_resort_fonts[i];
       bufsize = strlen(x11_font)+6;  /* Should be enought*/
       buffer = (char *)g_malloc(bufsize);
-      g_snprintf(buffer, bufsize, x11_font, 100);
+      g_snprintf(buffer, bufsize, x11_font, 100, 100);
       
-      gdk_font = gdk_font_load(buffer);
+      gdk_font = gdk_fontset_load(buffer);
       g_free(buffer);
       if (gdk_font!=NULL) {
 	message_warning(_("Warning no X Font for %s found, \nusing %s instead.\n"), font->public.name, x11_font);
@@ -367,7 +376,9 @@
   for (i=0;i<NUM_FONTS;i++) {
     font = g_new(FontPrivate, 1);
     font->public.name = font_data[i].fontname;
-    font->fontname_ps = font_data[i].fontname_ps;
+    for(j=0;j<NUM_PS_FONTS;j++) {
+      font->fontname_ps[j] = font_data[i].fontname_ps[j];
+    }
 
     font->fontname_x11 = NULL;
     font->fontname_x11_vec = font_data[i].fontname_x11;
@@ -433,8 +444,8 @@
   
   bufsize = strlen(fontprivate->fontname_x11)+6;  /* Should be enought*/
   buffer = (char *)malloc(bufsize);
-  g_snprintf(buffer, bufsize, fontprivate->fontname_x11, height);
-  gdk_font = gdk_font_load(buffer);
+  g_snprintf(buffer, bufsize, fontprivate->fontname_x11, height, height);
+  gdk_font = gdk_fontset_load(buffer);
   free(buffer);
   
   fontprivate->cache[index]->height = height;
@@ -443,7 +454,7 @@
   return gdk_font;
 }
 
-char *
+char **
 font_get_psfontname(Font *font)
 {
   FontPrivate *fontprivate;
Only in dia-0.83-6/lib: font.c~
diff -ur dia-0.83-0/lib/font.h dia-0.83-6/lib/font.h
--- dia-0.83-0/lib/font.h	Thu Jun  3 19:09:56 1999
+++ dia-0.83-6/lib/font.h	Mon Feb 14 03:27:19 2000
@@ -38,7 +38,7 @@
 extern void font_init(void);
 extern Font *font_getfont(const char *name);
 extern GdkFont *font_get_gdkfont(Font *font, int height);
-extern char *font_get_psfontname(Font *font);
+extern char **font_get_psfontname(Font *font);
 extern real font_string_width(const char *string, Font *font, real height);
 extern real font_ascent(Font *font, real height);
 extern real font_descent(Font *font, real height);
diff -ur dia-0.83-0/lib/render.h dia-0.83-6/lib/render.h
--- dia-0.83-0/lib/render.h	Tue Aug 31 22:45:36 1999
+++ dia-0.83-6/lib/render.h	Mon Feb 14 03:27:19 2000
@@ -183,6 +183,15 @@
 				Alignment alignment,
 				Color *color);
 
+/* Print a MULTIBYTE string at pos, using the current font */
+typedef void (*DrawMBStringFunc) (Renderer *renderer,
+				  const char *text,
+				  Point *pos,
+				  Alignment alignment,
+				  Color *color,
+				  Font *font,
+				  real height);
+
 /* Draw an image, given its bounding box */
 typedef void (*DrawImageFunc) (Renderer *renderer,
 			       Point *point,
@@ -253,6 +262,7 @@
   SetFillStyleFunc  set_fillstyle;
   /* Font stuff: */
   SetFontFunc       set_font;
+  SetFontFunc       set_mbfont;
   
   /* Lines: */
   DrawLineFunc      draw_line;
@@ -280,6 +290,7 @@
   
   /* Text: */
   DrawStringFunc    draw_string;
+  DrawMBStringFunc    draw_mbstring;
 
   /* Images: */
   DrawImageFunc     draw_image; /* Not really supported yet */
diff -ur dia-0.83-0/lib/text.c dia-0.83-6/lib/text.c
--- dia-0.83-0/lib/text.c	Mon Nov 22 09:32:02 1999
+++ dia-0.83-6/lib/text.c	Mon Feb 14 03:27:19 2000
@@ -381,19 +381,19 @@
   Point pos;
   int i;
   
-  renderer->ops->set_font(renderer, text->font, text->height);
-  
   pos = text->position;
-  
+
+  /* modified only this loop */
   for (i=0;i<text->numlines;i++) {
-    renderer->ops->draw_string(renderer,
-			       text->line[i],
-			       &pos, text->alignment,
-			       &text->color);
-    pos.y += text->height;
+     renderer->ops->draw_mbstring(renderer,
+ 				 text->line[i],
+ 				 &pos, text->alignment,
+ 				 &text->color,
+ 				 text->font,
+ 				 text->height);
+      pos.y += text->height;
   }
 
-
   if ((renderer->is_interactive) && (text->focus.has_focus)) {
     real curs_x, curs_y;
     real str_width_first;
@@ -577,11 +577,19 @@
       text_join_lines(text, row);
     return;
   }
-  memmove(text->line[row] + text->cursor_pos,
-	  text->line[row] + text->cursor_pos + 1,
-	  text->strlen[row] - text->cursor_pos);
+  if(text->line[row][text->cursor_pos+1] > 0) {
+    memmove(text->line[row] + text->cursor_pos,
+	    text->line[row] + text->cursor_pos + 1,
+	    text->strlen[row] - text->cursor_pos);
+
+    text->strlen[row]--;
+  } else {
+    memmove(text->line[row] + text->cursor_pos,
+	    text->line[row] + text->cursor_pos + 2,
+	    text->strlen[row] - text->cursor_pos);
 
-  text->strlen[row]--;
+    text->strlen[row]-=2;
+  }
   
   if (text->cursor_pos > text->strlen[text->cursor_row])
     text->cursor_pos = text->strlen[text->cursor_row];
@@ -600,6 +608,7 @@
   int row;
   int i;
   real width;
+  gchar *tmp_c;
   
   row = text->cursor_row;
   
@@ -608,13 +617,24 @@
       text_join_lines(text, row-1);
     return;
   }
-  memmove(text->line[row] + text->cursor_pos - 1,
-	  text->line[row] + text->cursor_pos,
-	  text->strlen[row] - text->cursor_pos + 1);
+  
+  if(text->line[row][text->cursor_pos-1] > 0) {
+    memmove(text->line[row] + text->cursor_pos - 1,
+	    text->line[row] + text->cursor_pos,
+	    text->strlen[row] - text->cursor_pos + 1);
+    text->strlen[row]--;
+
+    text->cursor_pos --;
+
+  } else {
+    memmove(text->line[row] + text->cursor_pos - 2,
+	    text->line[row] + text->cursor_pos,
+	    text->strlen[row] - text->cursor_pos + 1);
+    text->strlen[row]-=2;
 
-  text->strlen[row]--;
+    text->cursor_pos -=2;
+  }
 
-  text->cursor_pos --;
   
   if (text->cursor_pos > text->strlen[text->cursor_row])
     text->cursor_pos = text->strlen[text->cursor_row];
@@ -749,12 +769,20 @@
     
     break;
   case GDK_Left:
-    text->cursor_pos--;
+    if(text->line[text->cursor_row][text->cursor_pos-1] > 0) {
+      text->cursor_pos--;
+    } else {
+      text->cursor_pos-=2;
+    }
     if (text->cursor_pos<0)
       text->cursor_pos = 0;
     break;
   case GDK_Right:
-    text->cursor_pos++;
+    if(text->line[text->cursor_row][text->cursor_pos+1] > 0) {
+      text->cursor_pos++;
+    } else {
+      text->cursor_pos+=2;
+    }
     if (text->cursor_pos > text->strlen[text->cursor_row])
       text->cursor_pos = text->strlen[text->cursor_row];
     break;
@@ -802,10 +830,13 @@
     break;
   default:
     if (strlen>0) {
+      int i;
       return_val = TRUE;
-      *change = text_create_change(text, TYPE_INSERT_CHAR, str[0],
-				   text->cursor_pos, text->cursor_row);
-      text_insert_char(text, str[0]);
+      for(i = 0;i < strlen;i++) {
+        *change = text_create_change(text, TYPE_INSERT_CHAR, str[i],
+				     text->cursor_pos, text->cursor_row);
+        text_insert_char(text, str[i]);
+      }
     }
     break;
   }  
diff -ur dia-0.83-0/objects/UML/association.c dia-0.83-6/objects/UML/association.c
--- dia-0.83-0/objects/UML/association.c	Fri Nov 12 09:30:24 1999
+++ dia-0.83-6/objects/UML/association.c	Mon Feb 14 03:27:19 2000
@@ -279,13 +279,14 @@
   }
 
   /* Name: */
-  renderer->ops->set_font(renderer, assoc_font, ASSOCIATION_FONTHEIGHT);
+  /*renderer->ops->set_font(renderer, assoc_font, ASSOCIATION_FONTHEIGHT);*/
  
   if (assoc->name != NULL) {
     pos = assoc->text_pos;
-    renderer->ops->draw_string(renderer, assoc->name,
-			       &pos, assoc->text_align,
-			       &color_black);
+    renderer->ops->draw_mbstring(renderer, assoc->name,
+				 &pos, assoc->text_align,
+				 &color_black,
+				 assoc_font, ASSOCIATION_FONTHEIGHT);
   }
 
   /* Direction: */
@@ -324,15 +325,17 @@
     pos = end->text_pos;
 
     if (end->role != NULL) {
-      renderer->ops->draw_string(renderer, end->role,
-				 &pos, end->text_align,
-				 &color_black);
+      renderer->ops->draw_mbstring(renderer, end->role,
+				   &pos, end->text_align,
+				   &color_black,
+				   assoc_font, ASSOCIATION_FONTHEIGHT);
       pos.y += ASSOCIATION_FONTHEIGHT;
     }
     if (end->multiplicity != NULL) {
-      renderer->ops->draw_string(renderer, end->multiplicity,
-				 &pos, end->text_align,
-				 &color_black);
+      renderer->ops->draw_mbstring(renderer, end->multiplicity,
+				   &pos, end->text_align,
+				   &color_black,
+				   assoc_font, ASSOCIATION_FONTHEIGHT);
     }
   }
 }
diff -ur dia-0.83-0/objects/UML/class.c dia-0.83-6/objects/UML/class.c
--- dia-0.83-0/objects/UML/class.c	Fri Nov 12 09:30:24 1999
+++ dia-0.83-6/objects/UML/class.c	Mon Feb 14 03:27:25 2000
@@ -121,7 +121,12 @@
   Font *font;
   int i;
   GList *list;
-  
+
+  /* init process; it's nessesary when using it first time */
+  renderer->ops->set_font(renderer, 
+			  umlclass->normal_font,
+			  umlclass->font_height);
+
   assert(umlclass != NULL);
   assert(renderer != NULL);
 
@@ -154,11 +159,12 @@
 
   if (umlclass->stereotype != NULL) {
     p.y += 0.1 + umlclass->font_ascent;
-    renderer->ops->set_font(renderer, font, umlclass->font_height);
-    renderer->ops->draw_string(renderer,
-			       umlclass->stereotype_string,
-			       &p, ALIGN_CENTER, 
-			       &color_black);
+    /*renderer->ops->set_font(renderer, font, umlclass->font_height);*/
+    renderer->ops->draw_mbstring(renderer,
+				 umlclass->stereotype_string,
+				 &p, ALIGN_CENTER, 
+				 &color_black,
+				 font, umlclass->font_height);
   }
 
   /* name: */
@@ -169,11 +175,12 @@
 
   p.y += umlclass->classname_font_height;
 
-  renderer->ops->set_font(renderer, font, umlclass->classname_font_height);
-  renderer->ops->draw_string(renderer,
-			     umlclass->name,
-			     &p, ALIGN_CENTER, 
-			     &color_black);
+  /*renderer->ops->set_font(renderer, font, umlclass->classname_font_height);*/
+  renderer->ops->draw_mbstring(renderer,
+			       umlclass->name,
+			       &p, ALIGN_CENTER, 
+			       &color_black,
+			       font, umlclass->classname_font_height);
   
   if (umlclass->visible_attributes) {
     p1.x = x;
@@ -201,11 +208,12 @@
 	else
 	  font = umlclass->normal_font;
 
-	renderer->ops->set_font(renderer, font, umlclass->font_height);
-	renderer->ops->draw_string(renderer,
-				   umlclass->attributes_strings[i],
-				   &p, ALIGN_LEFT, 
-				   &color_black);
+	/*renderer->ops->set_font(renderer, font, umlclass->font_height);*/
+	renderer->ops->draw_mbstring(renderer,
+				     umlclass->attributes_strings[i],
+				     &p, ALIGN_LEFT, 
+				     &color_black,
+				     font, umlclass->font_height);
 	if (attr->class_scope) {
 	  p1 = p; 
 	  p1.y += umlclass->font_height*0.1;
@@ -251,11 +259,12 @@
 	else
 	  font = umlclass->normal_font;
 
-	renderer->ops->set_font(renderer, font, umlclass->font_height);
-	renderer->ops->draw_string(renderer,
-				   umlclass->operations_strings[i],
-				   &p, ALIGN_LEFT, 
-				   &color_black);
+	/*renderer->ops->set_font(renderer, font, umlclass->font_height);*/
+	renderer->ops->draw_mbstring(renderer,
+				     umlclass->operations_strings[i],
+				     &p, ALIGN_LEFT, 
+				     &color_black,
+				     font, umlclass->font_height);
 
 	if (op->class_scope) {
 	  p1 = p; 
@@ -299,17 +308,19 @@
     p.x = x + 0.3;
     p.y = y + 0.1 + font_ascent(umlclass->normal_font, umlclass->font_height);
 
-    renderer->ops->set_font(renderer, umlclass->normal_font,
-			    umlclass->font_height);
+    /*renderer->ops->set_font(renderer, umlclass->normal_font,
+      umlclass->font_height);*/
     i = 0;
     list = umlclass->formal_params;
     while (list != NULL) {
       /*UMLFormalParameter *param = (UMLFormalParameter *)list->data;*/
 
-      renderer->ops->draw_string(renderer,
-				 umlclass->templates_strings[i],
-				 &p, ALIGN_LEFT, 
-				 &color_black);
+      renderer->ops->draw_mbstring(renderer,
+				   umlclass->templates_strings[i],
+				   &p, ALIGN_LEFT, 
+				   &color_black,
+				   umlclass->normal_font,
+				   umlclass->font_height);
       
       p.y += umlclass->font_height;
 
@@ -429,16 +440,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);
Only in dia-0.83-6/objects/UML: class.c~
diff -ur dia-0.83-0/objects/UML/constraint.c dia-0.83-6/objects/UML/constraint.c
--- dia-0.83-0/objects/UML/constraint.c	Fri Nov 12 09:30:24 1999
+++ dia-0.83-6/objects/UML/constraint.c	Mon Feb 14 03:27:19 2000
@@ -215,12 +215,14 @@
 	     CONSTRAINT_ARROWLEN, CONSTRAINT_ARROWWIDTH, CONSTRAINT_WIDTH,
 	     &color_black, &color_white);
 
-  renderer->ops->set_font(renderer, constraint_font,
-			  CONSTRAINT_FONTHEIGHT);
-  renderer->ops->draw_string(renderer,
-			     constraint->text,
-			     &constraint->text_pos, ALIGN_LEFT,
-			     &color_black);
+  /*renderer->ops->set_font(renderer, constraint_font,
+    CONSTRAINT_FONTHEIGHT);*/
+  renderer->ops->draw_mbstring(renderer,
+			       constraint->text,
+			       &constraint->text_pos, ALIGN_LEFT,
+			       &color_black,
+			       constraint_font,
+			       CONSTRAINT_FONTHEIGHT);
 }
 
 static Object *
diff -ur dia-0.83-0/objects/UML/dependency.c dia-0.83-6/objects/UML/dependency.c
--- dia-0.83-0/objects/UML/dependency.c	Fri Nov 12 09:30:24 1999
+++ dia-0.83-6/objects/UML/dependency.c	Mon Feb 14 03:27:19 2000
@@ -191,23 +191,25 @@
 	       DEPENDENCY_ARROWLEN, DEPENDENCY_ARROWWIDTH, DEPENDENCY_WIDTH,
 	       &color_black, &color_white);
 
-  renderer->ops->set_font(renderer, dep_font, DEPENDENCY_FONTHEIGHT);
+  /*renderer->ops->set_font(renderer, dep_font, DEPENDENCY_FONTHEIGHT);*/
   pos = dep->text_pos;
   
   if (dep->stereotype != NULL) {
-    renderer->ops->draw_string(renderer,
-			       dep->stereotype,
-			       &pos, dep->text_align,
-			       &color_black);
+    renderer->ops->draw_mbstring(renderer,
+				 dep->stereotype,
+				 &pos, dep->text_align,
+				 &color_black,
+				 dep_font, DEPENDENCY_FONTHEIGHT);
 
     pos.y += DEPENDENCY_FONTHEIGHT;
   }
   
   if (dep->name != NULL) {
-    renderer->ops->draw_string(renderer,
-			       dep->name,
-			       &pos, dep->text_align,
-			       &color_black);
+    renderer->ops->draw_mbstring(renderer,
+				 dep->name,
+				 &pos, dep->text_align,
+				 &color_black,
+				 dep_font, DEPENDENCY_FONTHEIGHT);
   }
   
 }
diff -ur dia-0.83-0/objects/UML/generalization.c dia-0.83-6/objects/UML/generalization.c
--- dia-0.83-0/objects/UML/generalization.c	Fri Nov 12 09:30:24 1999
+++ dia-0.83-6/objects/UML/generalization.c	Mon Feb 14 03:27:19 2000
@@ -183,23 +183,25 @@
 	     GENERALIZATION_WIDTH,
 	     &color_black, &color_white);
 
-  renderer->ops->set_font(renderer, genlz_font, GENERALIZATION_FONTHEIGHT);
+  /*renderer->ops->set_font(renderer, genlz_font, GENERALIZATION_FONTHEIGHT);*/
   pos = genlz->text_pos;
   
   if (genlz->stereotype != NULL) {
-    renderer->ops->draw_string(renderer,
-			       genlz->stereotype,
-			       &pos, genlz->text_align,
-			       &color_black);
+    renderer->ops->draw_mbstring(renderer,
+				 genlz->stereotype,
+				 &pos, genlz->text_align,
+				 &color_black,
+				 genlz_font, GENERALIZATION_FONTHEIGHT);
 
     pos.y += GENERALIZATION_FONTHEIGHT;
   }
   
   if (genlz->name != NULL) {
-    renderer->ops->draw_string(renderer,
-			       genlz->name,
-			       &pos, genlz->text_align,
-			       &color_black);
+    renderer->ops->draw_mbstring(renderer,
+				 genlz->name,
+				 &pos, genlz->text_align,
+				 &color_black,
+				 genlz_font, GENERALIZATION_FONTHEIGHT);
   }
   
 }
diff -ur dia-0.83-0/objects/UML/implements.c dia-0.83-6/objects/UML/implements.c
--- dia-0.83-0/objects/UML/implements.c	Fri Nov 12 09:30:24 1999
+++ dia-0.83-6/objects/UML/implements.c	Mon Feb 14 03:27:19 2000
@@ -230,11 +230,12 @@
 			      &color_black);
 
 
-  renderer->ops->set_font(renderer, implements_font, IMPLEMENTS_FONTHEIGHT);
-  renderer->ops->draw_string(renderer,
-			     implements->text,
-			     &implements->text_pos, ALIGN_LEFT,
-			     &color_black);
+  /*renderer->ops->set_font(renderer, implements_font, IMPLEMENTS_FONTHEIGHT);*/
+  renderer->ops->draw_mbstring(renderer,
+			       implements->text,
+			       &implements->text_pos, ALIGN_LEFT,
+			       &color_black,
+			       implements_font, IMPLEMENTS_FONTHEIGHT);
 }
 
 static Object *
diff -ur dia-0.83-0/objects/UML/large_package.c dia-0.83-6/objects/UML/large_package.c
--- dia-0.83-0/objects/UML/large_package.c	Fri Nov 12 09:30:24 1999
+++ dia-0.83-6/objects/UML/large_package.c	Mon Feb 14 03:27:19 2000
@@ -205,19 +205,21 @@
 			   &color_black);
 
 
-  renderer->ops->set_font(renderer, pkg->font, LARGEPACKAGE_FONTHEIGHT);
+  /*renderer->ops->set_font(renderer, pkg->font, LARGEPACKAGE_FONTHEIGHT);*/
 
   p1.x = x + 0.1;
   p1.y = y - LARGEPACKAGE_FONTHEIGHT - font_descent(pkg->font, LARGEPACKAGE_FONTHEIGHT) - 0.1;
 
   if (pkg->stereotype) {
-    renderer->ops->draw_string(renderer, pkg->stereotype, &p1,
-			       ALIGN_LEFT, &color_black);
+    renderer->ops->draw_mbstring(renderer, pkg->stereotype, &p1,
+				 ALIGN_LEFT, &color_black,
+				 pkg->font, LARGEPACKAGE_FONTHEIGHT);
   }
   p1.y += LARGEPACKAGE_FONTHEIGHT;
 
-  renderer->ops->draw_string(renderer, pkg->name, &p1,
-			     ALIGN_LEFT, &color_black);
+  renderer->ops->draw_mbstring(renderer, pkg->name, &p1,
+			       ALIGN_LEFT, &color_black,
+			       pkg->font, LARGEPACKAGE_FONTHEIGHT);
 
 
 }
diff -ur dia-0.83-0/objects/UML/message.c dia-0.83-6/objects/UML/message.c
--- dia-0.83-0/objects/UML/message.c	Fri Nov 12 09:30:24 1999
+++ dia-0.83-6/objects/UML/message.c	Mon Feb 14 03:27:21 2000
@@ -277,8 +277,8 @@
 	     MESSAGE_ARROWLEN, MESSAGE_ARROWWIDTH, MESSAGE_WIDTH,
 	     &color_black, &color_white);
 
-  renderer->ops->set_font(renderer, message_font,
-			  MESSAGE_FONTHEIGHT);
+  /*renderer->ops->set_font(renderer, message_font,
+    MESSAGE_FONTHEIGHT);*/
 
   if (message->type==MESSAGE_CREATE) 
       mname = MESSAGE_CREATE_LABEL;
@@ -288,10 +288,12 @@
       mname = message->text;
 
   if (mname) 
-      renderer->ops->draw_string(renderer,
+      renderer->ops->draw_mbstring(renderer,
 				 mname, /*message->text,*/
 				 &message->text_pos, ALIGN_CENTER,
-				 &color_black);
+				 &color_black,
+				 message_font,
+				 MESSAGE_FONTHEIGHT);
 }
 
 static Object *
diff -ur dia-0.83-0/objects/UML/object.c dia-0.83-6/objects/UML/object.c
--- dia-0.83-0/objects/UML/object.c	Fri Nov 12 09:30:24 1999
+++ dia-0.83-6/objects/UML/object.c	Mon Feb 14 03:27:21 2000
@@ -239,17 +239,21 @@
   text_draw(ob->text, renderer);
 
   if (ob->stereotype != NULL) {
-      renderer->ops->draw_string(renderer,
-				 ob->stereotype,
-				 &ob->st_pos, ALIGN_CENTER,
-				 &color_black);
+      renderer->ops->draw_mbstring(renderer,
+				   ob->stereotype,
+				   &ob->st_pos, ALIGN_CENTER,
+				   &color_black,
+				   ob->text->font,
+				   ob->text->height);
   }
 
   if (ob->exstate != NULL) {
-      renderer->ops->draw_string(renderer,
-				 ob->exstate,
-				 &ob->ex_pos, ALIGN_CENTER,
-				 &color_black);
+      renderer->ops->draw_mbstring(renderer,
+				   ob->exstate,
+				   &ob->ex_pos, ALIGN_CENTER,
+				   &color_black,
+				   ob->text->font,
+				   ob->text->height);
   }
 
   /* Is there a better way to underline? */
diff -ur dia-0.83-0/objects/UML/realizes.c dia-0.83-6/objects/UML/realizes.c
--- dia-0.83-0/objects/UML/realizes.c	Fri Nov 12 09:30:24 1999
+++ dia-0.83-6/objects/UML/realizes.c	Mon Feb 14 03:27:21 2000
@@ -186,23 +186,25 @@
 	     REALIZES_TRIANGLESIZE, REALIZES_TRIANGLESIZE, REALIZES_WIDTH,
 	     &color_black, &color_white);
 
-  renderer->ops->set_font(renderer, realize_font, REALIZES_FONTHEIGHT);
+  /*renderer->ops->set_font(renderer, realize_font, REALIZES_FONTHEIGHT);*/
   pos = realize->text_pos;
   
   if (realize->stereotype != NULL) {
-    renderer->ops->draw_string(renderer,
-			       realize->stereotype,
-			       &pos, realize->text_align,
-			       &color_black);
+    renderer->ops->draw_mbstring(renderer,
+				 realize->stereotype,
+				 &pos, realize->text_align,
+				 &color_black,
+				 realize_font, REALIZES_FONTHEIGHT);
 
     pos.y += REALIZES_FONTHEIGHT;
   }
   
   if (realize->name != NULL) {
-    renderer->ops->draw_string(renderer,
-			       realize->name,
-			       &pos, realize->text_align,
-			       &color_black);
+    renderer->ops->draw_mbstring(renderer,
+				 realize->name,
+				 &pos, realize->text_align,
+				 &color_black,
+				 realize_font, REALIZES_FONTHEIGHT);
   }
   
 }
diff -ur dia-0.83-0/objects/UML/uml.h dia-0.83-6/objects/UML/uml.h
--- dia-0.83-0/objects/UML/uml.h	Thu Jun  3 19:12:04 1999
+++ dia-0.83-6/objects/UML/uml.h	Mon Feb 14 03:27:25 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);
