Index: mojo/public/bindings/generators/mojom_cpp_generator.py |
diff --git a/mojo/public/bindings/generators/mojom_cpp_generator.py b/mojo/public/bindings/generators/mojom_cpp_generator.py |
index c4dc860de9dcc62f7fc571b36454643447c7fb9e..a86341932343b20faa8dcc127e4a125e1f3ae657 100644 |
--- a/mojo/public/bindings/generators/mojom_cpp_generator.py |
+++ b/mojo/public/bindings/generators/mojom_cpp_generator.py |
@@ -8,6 +8,7 @@ import datetime |
import mojom |
import mojom_pack |
import os |
+import re |
import sys |
from string import Template |
@@ -35,8 +36,7 @@ class Forwards(object): |
def __repr__(self): |
return '\n'.join( |
- sorted(map( |
- lambda kind: "class %s;" % kind.name.capitalize(), self.kinds))) |
+ sorted(map(lambda kind: "class %s;" % kind.name, self.kinds))) |
class Lines(object): |
@@ -58,8 +58,7 @@ class Lines(object): |
def GetStructFromMethod(interface, method): |
"""Converts a method's parameters into the fields of a struct.""" |
- params_class = \ |
- "%s_%s_Params" % (interface.name.capitalize(), method.name.capitalize()) |
+ params_class = "%s_%s_Params" % (interface.name, method.name) |
struct = mojom.Struct(params_class) |
for param in method.parameters: |
struct.AddField(param.name, param.kind, param.ordinal) |
@@ -68,6 +67,10 @@ def GetStructFromMethod(interface, method): |
def IsPointerKind(kind): |
return isinstance(kind, (mojom.Struct, mojom.Array)) or kind.spec == 's' |
+def CamelToUnderscores(camel): |
+ s = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', camel) |
+ return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s).lower() |
+ |
class CPPGenerator(object): |
struct_serialization_compute_template = \ |
@@ -135,7 +138,7 @@ class CPPGenerator(object): |
@classmethod |
def GetType(cls, kind): |
if isinstance(kind, mojom.Struct): |
- return "%s*" % kind.name.capitalize() |
+ return "%s*" % kind.name |
if isinstance(kind, mojom.Array): |
return "mojo::Array<%s>*" % cls.GetType(kind.kind) |
if kind.spec == 's': |
@@ -145,7 +148,7 @@ class CPPGenerator(object): |
@classmethod |
def GetConstType(cls, kind): |
if isinstance(kind, mojom.Struct): |
- return "const %s*" % kind.name.capitalize() |
+ return "const %s*" % kind.name |
if isinstance(kind, mojom.Array): |
return "const mojo::Array<%s>*" % cls.GetConstType(kind.kind) |
if kind.spec == 's': |
@@ -175,7 +178,7 @@ class CPPGenerator(object): |
return cls.bool_field_template.substitute(FIELD=field.name) |
itype = None |
if isinstance(kind, mojom.Struct): |
- itype = "mojo::internal::StructPointer<%s>" % kind.name.capitalize() |
+ itype = "mojo::internal::StructPointer<%s>" % kind.name |
elif isinstance(kind, mojom.Array): |
itype = "mojo::internal::ArrayPointer<%s>" % cls.GetType(kind.kind) |
elif kind.spec == 's': |
@@ -215,10 +218,11 @@ class CPPGenerator(object): |
(self.module.name.upper(), name.upper()) |
def GetHeaderFile(self, *components): |
+ components = map(lambda c: CamelToUnderscores(c), components) |
component_string = '_'.join(components) |
return os.path.join( |
self.header_dir, |
- "%s_%s.h" % (self.module.name.lower(), component_string.lower())) |
+ "%s_%s.h" % (CamelToUnderscores(self.module.name), component_string)) |
# Pass |output_dir| to emit files to disk. Omit |output_dir| to echo all files |
# to stdout. |
@@ -228,10 +232,12 @@ class CPPGenerator(object): |
self.output_dir = output_dir |
def WriteTemplateToFile(self, template_name, name, **substitutions): |
+ template_name = CamelToUnderscores(template_name) |
+ name = CamelToUnderscores(name) |
template = self.GetTemplate(template_name) |
- filename = "%s_%s" % (self.module.name.lower(), template_name) |
- filename = filename.replace("interface", name.lower()) |
- filename = filename.replace("struct", name.lower()) |
+ filename = "%s_%s" % (CamelToUnderscores(self.module.name), template_name) |
+ filename = filename.replace("interface", name) |
+ filename = filename.replace("struct", name) |
substitutions['YEAR'] = datetime.date.today().year |
substitutions['NAMESPACE'] = self.module.namespace |
if self.output_dir is None: |
@@ -295,15 +301,15 @@ class CPPGenerator(object): |
fields = self.GetSerializedFields(ps) |
handle_fields = self.GetHandleFields(ps) |
for field in fields: |
- substitutions = {'NAME': param_name, 'FIELD': field.name.lower()} |
+ substitutions = {'NAME': param_name, 'FIELD': field.name} |
encodes.Add(substitutions) |
decodes.Add(substitutions) |
for field in handle_fields: |
- substitutions = {'NAME': param_name, 'FIELD': field.name.lower()} |
+ substitutions = {'NAME': param_name, 'FIELD': field.name} |
encode_handles.Add(substitutions) |
decode_handles.Add(substitutions) |
return self.GetTemplate("struct_serialization").substitute( |
- CLASS = "%s::%s" % (self.module.namespace.lower(), class_name), |
+ CLASS = "%s::%s" % (self.module.namespace, class_name), |
NAME = param_name, |
ENCODES = encodes, |
DECODES = decodes, |
@@ -318,16 +324,16 @@ class CPPGenerator(object): |
self.WriteTemplateToFile("struct.h", struct.name, |
HEADER_GUARD = self.GetHeaderGuard(struct.name), |
- CLASS = struct.name.capitalize(), |
+ CLASS = struct.name, |
FORWARDS = forwards, |
- DECLARATION = self.GetStructDeclaration(struct.name.capitalize(), ps)) |
+ DECLARATION = self.GetStructDeclaration(struct.name, ps)) |
def GenerateStructSource(self, ps): |
struct = ps.struct |
header = self.GetHeaderFile(struct.name) |
- implementation = self.GetStructImplementation(struct.name.capitalize(), ps) |
+ implementation = self.GetStructImplementation(struct.name, ps) |
self.WriteTemplateToFile("struct.cc", struct.name, |
- CLASS = struct.name.capitalize(), |
+ CLASS = struct.name, |
NUM_FIELDS = len(struct.fields), |
HEADER = header, |
IMPLEMENTATION = implementation) |
@@ -336,13 +342,15 @@ class CPPGenerator(object): |
struct = ps.struct |
self.WriteTemplateToFile("struct_serialization.h", struct.name, |
HEADER_GUARD = self.GetHeaderGuard(struct.name + "_SERIALIZATION"), |
- CLASS = struct.name.capitalize(), |
+ CLASS = struct.name, |
+ NAME = CamelToUnderscores(struct.name), |
FULL_CLASS = "%s::%s" % \ |
- (self.module.namespace, struct.name.capitalize())) |
+ (self.module.namespace, struct.name)) |
def GenerateStructSerializationSource(self, ps): |
struct = ps.struct |
serialization_header = self.GetHeaderFile(struct.name, "serialization") |
+ param_name = CamelToUnderscores(struct.name) |
kinds = DependentKinds() |
for field in struct.fields: |
@@ -354,20 +362,18 @@ class CPPGenerator(object): |
class_header = self.GetHeaderFile(struct.name) |
clones = Lines(self.struct_serialization_clone_template) |
- sizes = " return sizeof(*%s)" % struct.name.lower() |
+ sizes = " return sizeof(*%s)" % param_name |
fields = self.GetSerializedFields(ps) |
for field in fields: |
- substitutions = {'NAME': struct.name.lower(), 'FIELD': field.name.lower()} |
+ substitutions = {'NAME': param_name, 'FIELD': field.name} |
sizes += \ |
self.struct_serialization_compute_template.substitute(substitutions) |
clones.Add(substitutions) |
sizes += ";" |
- serialization = \ |
- self.GetStructSerialization(struct.name.capitalize(), struct.name, ps) |
+ serialization = self.GetStructSerialization(struct.name, param_name, ps) |
self.WriteTemplateToFile("struct_serialization.cc", struct.name, |
- NAME = struct.name.lower(), |
- CLASS = "%s::%s" % \ |
- (self.module.namespace.lower(), struct.name.capitalize()), |
+ NAME = param_name, |
+ CLASS = "%s::%s" % (self.module.namespace, struct.name), |
SERIALIZATION_HEADER = serialization_header, |
INCLUDES = '\n'.join(includes), |
SIZES = sizes, |
@@ -387,7 +393,7 @@ class CPPGenerator(object): |
self.WriteTemplateToFile("interface.h", interface.name, |
HEADER_GUARD = self.GetHeaderGuard(interface.name), |
- CLASS = interface.name.capitalize(), |
+ CLASS = interface.name, |
FORWARDS = forwards, |
METHODS = '\n'.join(methods)) |
@@ -395,7 +401,7 @@ class CPPGenerator(object): |
header = self.GetHeaderFile(interface.name) |
self.WriteTemplateToFile("interface_stub.h", interface.name, |
HEADER_GUARD = self.GetHeaderGuard(interface.name + "_STUB"), |
- CLASS = interface.name.capitalize(), |
+ CLASS = interface.name, |
HEADER = header) |
def GenerateInterfaceStubSource(self, interface): |
@@ -405,7 +411,7 @@ class CPPGenerator(object): |
for method in interface.methods: |
cases.append(self.GetCaseLine(interface, method)) |
self.WriteTemplateToFile("interface_stub.cc", interface.name, |
- CLASS = interface.name.capitalize(), |
+ CLASS = interface.name, |
CASES = '\n'.join(cases), |
STUB_HEADER = stub_header, |
SERIALIZATION_HEADER = serialization_header) |
@@ -428,8 +434,8 @@ class CPPGenerator(object): |
template_declaration = self.GetTemplate("template_declaration") |
for method in interface.methods: |
names.append(self.name_template.substitute( |
- INTERFACE = interface.name.capitalize(), |
- METHOD = method.name.capitalize(), |
+ INTERFACE = interface.name, |
+ METHOD = method.name, |
NAME = name)) |
name += 1 |
@@ -455,7 +461,7 @@ class CPPGenerator(object): |
serializations.append( |
self.GetStructSerialization("internal::" + struct.name, "params", ps)) |
self.WriteTemplateToFile("interface_serialization.cc", interface.name, |
- HEADER = self.GetHeaderFile(interface.name.lower(), "serialization"), |
+ HEADER = self.GetHeaderFile(interface.name, "serialization"), |
IMPLEMENTATIONS = '\n'.join(implementations), |
SERIALIZATIONS = '\n'.join(serializations)) |
@@ -472,7 +478,7 @@ class CPPGenerator(object): |
self.WriteTemplateToFile("interface_proxy.h", interface.name, |
HEADER_GUARD = self.GetHeaderGuard(interface.name + "_PROXY"), |
HEADER = self.GetHeaderFile(interface.name), |
- CLASS = interface.name.capitalize(), |
+ CLASS = interface.name, |
METHODS = '\n'.join(methods)) |
def GenerateInterfaceProxySource(self, interface): |
@@ -490,13 +496,11 @@ class CPPGenerator(object): |
params_list = map( |
lambda param: "%s %s" % (self.GetConstType(param.kind), param.name), |
method.parameters) |
- name = \ |
- "internal::k%s_%s_Name" % (interface.name.capitalize(), method.name) |
- params_name = \ |
- "internal::%s_%s_Params" % (interface.name.capitalize(), method.name) |
+ name = "internal::k%s_%s_Name" % (interface.name, method.name) |
+ params_name = "internal::%s_%s_Params" % (interface.name, method.name) |
implementations.Add( |
- CLASS = interface.name.capitalize(), |
+ CLASS = interface.name, |
METHOD = method.name, |
NAME = name, |
PARAMS = params_name, |
@@ -507,7 +511,7 @@ class CPPGenerator(object): |
HEADER = self.GetHeaderFile(interface.name, "proxy"), |
SERIALIZATION_HEADER = \ |
self.GetHeaderFile(interface.name, "serialization"), |
- CLASS = interface.name.capitalize(), |
+ CLASS = interface.name, |
IMPLEMENTATIONS = implementations) |
def GenerateFiles(self): |