diff src/menubar.c @ 219:262b8bb4a523 r20-4b8

Import from CVS: tag r20-4b8
author cvs
date Mon, 13 Aug 2007 10:09:35 +0200
parents acd284d43ca1
children 677f6a0ee643
line wrap: on
line diff
--- a/src/menubar.c	Mon Aug 13 10:08:36 2007 +0200
+++ b/src/menubar.c	Mon Aug 13 10:09:35 2007 +0200
@@ -203,23 +203,31 @@
 
   string_result = (Bufbyte *) alloca (end * MAX_EMCHAR_LEN);
   string_result_ptr = string_result;
-  for (i = 0; i < end ; i++)
+  for (i = 0; i < end; i++)
     {
-      elt = charptr_emchar_n (name_data, i);
+      elt = charptr_emchar (name_data);
       elt = DOWNCASE (buf, elt);
-      if (elt == '%')
-	expecting_underscore = 1;
-      else if (expecting_underscore)
+      if (expecting_underscore)
 	{
 	  expecting_underscore = 0;
-	  if (elt != '_')
+	  switch (elt)
 	    {
+	    case '%':
+	      /* Allow `%%' to mean `%'.  */
+	      string_result_ptr += set_charptr_emchar (string_result_ptr, '%');
+	      break;
+	    case '_':
+	      break;
+	    default:
 	      string_result_ptr += set_charptr_emchar (string_result_ptr, '%');
 	      string_result_ptr += set_charptr_emchar (string_result_ptr, elt);
 	    }
 	}
+      else if (elt == '%')
+	expecting_underscore = 1;
       else
 	string_result_ptr += set_charptr_emchar (string_result_ptr, elt);
+      INC_CHARPTR (name_data);
     }
 
   return make_string (string_result, string_result_ptr - string_result);