Index: modules/hangul/hangul-defs.h
===================================================================
RCS file: /cvs/gnome/pango/modules/hangul/hangul-defs.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- modules/hangul/hangul-defs.h	3 Nov 2002 19:56:24 -0000	1.4
+++ modules/hangul/hangul-defs.h	17 Apr 2004 16:17:57 -0000	1.5
@@ -48,6 +48,7 @@
 #define HTONE1 0x302E
 #define HTONE2 0x302F
 
+#define IS_JAMO(wc) (wc >= LBASE && wc <= TEND)
 #define IS_L(wc) (wc >= LBASE && wc <= LEND)
 #define IS_V(wc) (wc >= VFILL && wc <= VEND)
 #define IS_T(wc) (wc > TBASE && wc <= TEND)
Index: modules/hangul/hangul-fc.c
===================================================================
RCS file: /cvs/gnome/pango/modules/hangul/hangul-fc.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- modules/hangul/hangul-fc.c	23 Sep 2003 23:11:51 -0000	1.13
+++ modules/hangul/hangul-fc.c	17 Apr 2004 16:17:57 -0000	1.14
@@ -1,7 +1,7 @@
 /* Pango
  * hangul-fc.c: Hangul shaper for FreeType based backends
  *
- * Copyright (C) 2002 Changwoo Ryu
+ * Copyright (C) 2002-2004 Changwoo Ryu
  * Author: Changwoo Ryu <cwryu@debian.org>
  *
  * This library is free software; you can redistribute it and/or
@@ -275,6 +275,21 @@
     render_tone(font, tone, glyphs, n_glyphs, cluster_offset);
 }
 
+static void
+render_basic (PangoFont *font, gunichar wc,
+	      PangoGlyphString *glyphs, int *n_glyphs, int cluster_offset)
+{
+  int index;
+  index = find_char (font, wc);
+  pango_glyph_string_set_size (glyphs, *n_glyphs + 1);
+  if (index)
+    set_glyph (font, glyphs, *n_glyphs, cluster_offset, index);
+  else 
+    set_glyph (font, glyphs, *n_glyphs, cluster_offset,
+	       get_unknown_glyph (font, wc));
+  (*n_glyphs)++;
+}
+
 static void 
 hangul_engine_shape (PangoEngineShape *engine,
 		     PangoFont        *font,
@@ -307,13 +322,14 @@
       if (n_jamos)
 	{
 	  gunichar prev = jamos[n_jamos - 1];
-	  if ((!IS_L (prev) && IS_S (wc)) ||
+	  if ((!IS_JAMO (wc) && !IS_S (wc) && !IS_M (wc)) ||
+	      (!IS_L (prev) && IS_S (wc)) ||
 	      (IS_T (prev) && IS_L (wc)) ||
 	      (IS_V (prev) && IS_L (wc)) ||
 	      (IS_T (prev) && IS_V (wc)) ||
-	      IS_M(prev))
+	      IS_M (prev))
 	    {
-	      /* Draw a syllable. */
+	      /* Draw a syllable with these jamos. */
 	      render_syllable (font, jamos, n_jamos, glyphs,
 			       &n_glyphs, start - text);
 	      n_jamos = 0;
@@ -333,7 +349,12 @@
 	    jamos = g_renew (gunichar, jamos, max_jamos);
 	}
 
-      if (IS_S (wc))
+      if (!IS_JAMO (wc) && !IS_S (wc) && !IS_M (wc))
+	{
+	  render_basic (font, wc, glyphs, &n_glyphs, start - text);
+	  start = g_utf8_next_char (p);
+	}
+      else if (IS_S (wc))
 	{
 	  jamos[n_jamos++] = L_FROM_S (wc);
 	  jamos[n_jamos++] = V_FROM_S (wc);
