Index: build/android/gyp/java_cpp_enum.py |
diff --git a/build/android/gyp/java_cpp_enum.py b/build/android/gyp/java_cpp_enum.py |
index 3cb70ce8cf17b4ed2c1f0895210fc1b88b6ea68d..f66f6cb11d377acd725a818dd511efc9d5b014e2 100755 |
--- a/build/android/gyp/java_cpp_enum.py |
+++ b/build/android/gyp/java_cpp_enum.py |
@@ -54,6 +54,7 @@ class EnumDefinition(object): |
self._Validate() |
self._AssignEntryIndices() |
self._StripPrefix() |
+ self._NormalizeNames() |
def _Validate(self): |
assert self.class_name |
@@ -92,10 +93,10 @@ class EnumDefinition(object): |
def StripEntries(entries): |
ret = collections.OrderedDict() |
- for (k, v) in entries.iteritems(): |
+ for k, v in entries.iteritems(): |
stripped_key = k.replace(prefix_to_strip, '', 1) |
if isinstance(v, basestring): |
- stripped_value = v.replace(prefix_to_strip, '', 1) |
+ stripped_value = v.replace(prefix_to_strip, '') |
else: |
stripped_value = v |
ret[stripped_key] = stripped_value |
@@ -105,6 +106,44 @@ class EnumDefinition(object): |
self.entries = StripEntries(self.entries) |
self.comments = StripEntries(self.comments) |
+ def _NormalizeNames(self): |
+ self.entries = _TransformKeys(self.entries, _KCamelToShouty) |
+ self.comments = _TransformKeys(self.comments, _KCamelToShouty) |
+ |
+ |
+def _TransformKeys(d, func): |
+ """Normalize keys in |d| and update references to old keys in |d| values.""" |
+ normal_keys = {k: func(k) for k in d} |
+ ret = collections.OrderedDict() |
+ for k, v in d.iteritems(): |
+ # Need to transform values as well when the entry value was explicitly set |
+ # (since it could contain references to other enum entry values). |
+ if isinstance(v, basestring): |
+ for normal_key in normal_keys: |
+ v = v.replace(normal_key, normal_keys[normal_key]) |
+ ret[normal_keys[k]] = v |
+ return ret |
+ |
+ |
+def _KCamelToShouty(s): |
+ """Convert |s| from kCamelCase or CamelCase to SHOUTY_CASE. |
+ |
+ kFooBar -> FOO_BAR |
+ FooBar -> FOO_BAR |
+ FooBAR9 -> FOO_BAR9 |
+ FooBARBaz -> FOO_BAR_BAZ |
+ """ |
+ if not re.match(r'^k?([A-Z][^A-Z]+|[A-Z0-9]+)+$', s): |
+ return s |
+ # Strip the leading k. |
+ s = re.sub(r'^k', '', s) |
+ # Add _ between title words and anything else. |
+ s = re.sub(r'([^_])([A-Z][^A-Z_0-9]+)', r'\1_\2', s) |
+ # Add _ between lower -> upper transitions. |
+ s = re.sub(r'([^A-Z_0-9])([A-Z])', r'\1_\2', s) |
+ return s.upper() |
+ |
+ |
class DirectiveSet(object): |
class_name_override_key = 'CLASS_NAME_OVERRIDE' |
enum_package_key = 'ENUM_PACKAGE' |