SF bug #795506:  Wrong handling of string format code for float values.

Adding missing support for '%F'.

Will backport to 2.3.1.
diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py
index 7c98a3b..af171d0 100644
--- a/Lib/test/string_tests.py
+++ b/Lib/test/string_tests.py
@@ -550,6 +550,7 @@
 
         self.checkequal(' 42', '%3ld', '__mod__', 42)
         self.checkequal('0042.00', '%07.2f', '__mod__', 42)
+        self.checkequal('0042.00', '%07.2F', '__mod__', 42)
 
         self.checkraises(TypeError, 'abc', '__mod__')
         self.checkraises(TypeError, '%(foo)s', '__mod__', 42)
diff --git a/Misc/NEWS b/Misc/NEWS
index cc2b858..a132b13 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@
 Core and builtins
 -----------------
 
+- The % formatting operator now supports '%F' which is equivalent to
+  '%f'.  This has always been documented but never implemented.
+
 - complex(obj) could leak a little memory if obj wasn't a string or
   number.
 
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 31aeaa7..04c9c98 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -3921,8 +3921,11 @@
 			case 'e':
 			case 'E':
 			case 'f':
+			case 'F':
 			case 'g':
 			case 'G':
+				if (c == 'F')
+					c = 'f';
 				pbuf = formatbuf;
 				len = formatfloat(pbuf, sizeof(formatbuf),
 						  flags, prec, c, v);
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 163976e..7ba9547 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -6540,8 +6540,11 @@
 	    case 'e':
 	    case 'E':
 	    case 'f':
+	    case 'F':
 	    case 'g':
 	    case 'G':
+		if (c == 'F')
+			c = 'f';
 		pbuf = formatbuf;
 		len = formatfloat(pbuf, sizeof(formatbuf)/sizeof(Py_UNICODE),
 			flags, prec, c, v);