diff -uNr pango_origin/pango/pangocairo.h pango_modify/pango/pangocairo.h
--- pango_origin/pango/pangocairo.h	2005-07-21 21:55:19.000000000 +0800
+++ pango_modify/pango/pangocairo.h	2006-06-01 17:21:35.000000000 +0800
@@ -87,6 +87,12 @@
 void pango_cairo_show_layout       (cairo_t          *cr,
 				    PangoLayout      *layout);
 
+void pango_cairo_show_error_underline (cairo_t       *cr,                                       
+					                   int            x,
+					                   int            y,
+					                   int            width,
+					                   int            height);
+
 /*
  * Rendering to a path
  */
@@ -97,6 +103,12 @@
 				    PangoLayoutLine  *line);
 void pango_cairo_layout_path       (cairo_t          *cr,
 				    PangoLayout      *layout);
+					
+void pango_cairo_error_underline_path (cairo_t       *cr,                                       
+					                   int            x,
+					                   int            y,
+					                   int            width,
+					                   int            height);
 
 G_END_DECLS
 
diff -uNr pango_origin/pango/pangocairo-render.c pango_modify/pango/pangocairo-render.c
--- pango_origin/pango/pangocairo-render.c	2006-05-30 13:18:59.000000000 +0800
+++ pango_modify/pango/pangocairo-render.c	2006-06-01 17:21:39.000000000 +0800
@@ -540,6 +540,43 @@
   cairo_restore (cr);
 }
 
+void 
+pango_cairo_show_error_underline (cairo_t       *cr,                                  
+					              int            x,
+					              int            y,
+					              int            width,
+					              int            height)
+{
+  PangoLayout *layout;
+  PangoContext *context;
+  PangoFontMap *fontmap;
+  PangoRenderer *renderer;
+  PangoCairoRenderer *crenderer;
+
+  g_return_if_fail (cr != NULL);
+  g_return_if_fail ((width > 0) && (height > 0));
+  
+  layout = pango_cairo_create_layout (cr);
+  context = pango_layout_get_context (layout);
+  fontmap = pango_context_get_font_map (context);
+  renderer = _pango_cairo_font_map_get_renderer (PANGO_CAIRO_FONT_MAP (fontmap));
+  crenderer = PANGO_CAIRO_RENDERER (renderer);
+  
+  cairo_save (cr);
+
+  crenderer->cr = cr;
+  crenderer->do_path = FALSE;
+  cairo_get_current_point (cr, &crenderer->x_offset, &crenderer->y_offset);
+
+  pango_renderer_draw_error_underline (renderer, x, y, width, height);
+  
+  crenderer->cr = NULL;
+  crenderer->x_offset = 0.;
+  crenderer->y_offset = 0.;
+  
+  cairo_restore (cr);
+} 
+
 /**
  * pango_cairo_glyph_string_path
  * @cr: a Cairo context
@@ -678,3 +715,39 @@
   cairo_set_font_face (cr, NULL);
 }
 
+void 
+pango_cairo_error_underline_path (cairo_t       *cr,                                  
+					              int            x,
+					              int            y,
+					              int            width,
+					              int            height)
+{
+  PangoLayout *layout;
+  PangoContext *context;
+  PangoFontMap *fontmap;
+  PangoRenderer *renderer;
+  PangoCairoRenderer *crenderer;
+
+  g_return_if_fail (cr != NULL);
+  g_return_if_fail ((width > 0) && (height > 0));
+  
+  layout = pango_cairo_create_layout (cr);
+  context = pango_layout_get_context (layout);
+  fontmap = pango_context_get_font_map (context);
+  renderer = _pango_cairo_font_map_get_renderer (PANGO_CAIRO_FONT_MAP (fontmap));
+  crenderer = PANGO_CAIRO_RENDERER (renderer);
+
+  crenderer->cr = cr;
+  crenderer->do_path = TRUE;
+  cairo_get_current_point (cr, &crenderer->x_offset, &crenderer->y_offset);
+
+  pango_renderer_draw_error_underline (renderer, x, y, width, height);
+  
+  crenderer->cr = NULL;
+  crenderer->do_path = FALSE;
+  crenderer->x_offset = 0.;
+  crenderer->y_offset = 0.;
+  
+  cairo_set_font_face (cr, NULL);
+}
+
