--- pango-markup.c.bak	2006-04-29 18:28:57.000000000 +0800
+++ pango-markup.c	2006-04-30 00:34:08.000000000 +0800
@@ -781,7 +781,7 @@
 {
   SizeLevel level = Medium;
   double factor;
-  
+    
   if (strcmp (size, "xx-small") == 0)
     {
       level = XXSmall;
@@ -996,15 +996,53 @@
           gulong n;
 
           n = strtoul (size, &end, 10);
-
-          if (*end != '\0')
+            
+          if (*end == '%')
             {
-              g_set_error (error,
+	      int char_size = strlen (end);
+	      if (char_size > 1)
+	        {
+	          g_set_error (error,
+                               G_MARKUP_ERROR,
+                               G_MARKUP_ERROR_INVALID_CONTENT,
+                               _("Value of 'size' attribute on <span> tag on line %d"
+                                 "could not be parsed; should be an integer, or a "
+                                 "string such as 'small', or a scale such as '150%'," 
+				 "not '%s'"),
+                               line_number, size);
+						   
+                  goto error;
+		}
+				
+		char_size = strlen (size);
+		char *temp = g_malloc0 ((gulong)char_size);
+	        int i;
+	  
+	        for (i = 0; i < char_size - 1; i++)
+		  {
+		    temp[i] = size[i];
+		  }
+	        temp[char_size - 1] = '\0';
+	  
+	        n = strtoul (temp, (char **)NULL, 10);
+	        double factor = (double)n / 100;	  
+	            	  	  
+	        add_attribute (tag, pango_attr_scale_new (factor));
+                if (tag)
+                    open_tag_set_absolute_font_scale (tag, factor);
+					
+		g_free (temp);
+				  
+                return TRUE;
+	      }
+	    else if ((*end != '\0') && (*end != '%'))
+              {
+                g_set_error (error,
                            G_MARKUP_ERROR,
                            G_MARKUP_ERROR_INVALID_CONTENT,
                            _("Value of 'size' attribute on <span> tag on line %d"
                              "could not be parsed; should be an integer, or a "
-                             "string such as 'small', not '%s'"),
+                             "string such as 'small', or a scale such as '150%', not '%s'"),
                            line_number, size);
               goto error;
             }
@@ -1038,7 +1076,7 @@
                        G_MARKUP_ERROR_INVALID_CONTENT,
                        _("Value of 'size' attribute on <span> tag on line %d"
                          "could not be parsed; should be an integer, or a "
-                         "string such as 'small', not '%s'"),
+                         "string such as 'small', or a scale such as '150%', not '%s'"),
                        line_number, size);
           goto error;
         }
