Browse Source

allow two capital letters per word in auto-capitalize mode

Darren Ranalli 18 years ago
parent
commit
c9201caa41
1 changed files with 24 additions and 3 deletions
  1. 24 3
      direct/src/gui/DirectEntry.py

+ 24 - 3
direct/src/gui/DirectEntry.py

@@ -192,15 +192,36 @@ class DirectEntry(DirectFrame):
         name = self.get().decode('utf-8')
         # capitalize each word
         capName = ''
+        # allow no more than two capital letters per word
+        capCount = 0
+        capMax = 2
         for i in xrange(len(name)):
             character = name[i]
-            # is it a letter?
+            # is it a letter that can be capitalized?
             # This assumes that string.lower and string.upper will return different
             # values for all unicode letters.
-            if string.lower(character) != string.upper(character):
-                # if it's not preceded by a letter, capitalize it
+            canCapitalize = string.lower(character) != string.upper(character)
+            if not canCapitalize:
+                # this is a non-capitalize-able letter, assume we are between words.
+                # reset the per-word capital letter count
+                capCount = 0
+            else:
+                capitalize = False
+                # if it's not preceded by a letter, capitalize it unconditionally;
+                # it's the first letter of a word
                 if (i == 0) or string.lower(name[i-1]) == string.upper(name[i-1]):
+                    capitalize = True
+                elif capCount < capMax:
+                    # we haven't hit the per-word limit for capital letters yet
+                    # is it a capital letter?
+                    if (character == string.upper(character)):
+                        # allow this letter to remain capitalized
+                        capitalize = True
+                if capitalize:
                     character = string.upper(character)
+                    capCount += 1
+                else:
+                    character = string.lower(character)
             capName += character
         self.enterText(capName.encode('utf-8'))