diff options
| author | Nuno Santos <nsantos@apache.org> | 2008-05-08 16:00:00 +0000 |
|---|---|---|
| committer | Nuno Santos <nsantos@apache.org> | 2008-05-08 16:00:00 +0000 |
| commit | 18f885ca547803c92e22c9bf7cf426aab0d27402 (patch) | |
| tree | 33492ca3b8d94defeda38f2ee897508a54fddbb7 /cpp | |
| parent | 8d1a8ac4bef1230131aaec54883d50aedd8aa314 (diff) | |
| download | qpid-python-18f885ca547803c92e22c9bf7cf426aab0d27402.tar.gz | |
QPID-1026: managementgen C++ symbol validation - applied patch supplied by Matt Farrellee
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@654566 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp')
| -rwxr-xr-x | cpp/managementgen/generate.py | 4 | ||||
| -rwxr-xr-x | cpp/managementgen/schema.py | 66 |
2 files changed, 60 insertions, 10 deletions
diff --git a/cpp/managementgen/generate.py b/cpp/managementgen/generate.py index 5e3aa51b57..da78d6c7e9 100755 --- a/cpp/managementgen/generate.py +++ b/cpp/managementgen/generate.py @@ -192,7 +192,7 @@ class Generator: if dot == -1: raise ValueError ("Invalid template file name %s" % templateFile) extension = templateFile[dot:len (templateFile)] - path = self.dest + "Package" + schema.getPackageName().capitalize() + extension + path = self.dest + "Package" + schema.getPackageNameCap() + extension return path def targetClassFile (self, _class, templateFile): @@ -200,7 +200,7 @@ class Generator: if dot == -1: raise ValueError ("Invalid template file name %s" % templateFile) extension = templateFile[dot:len (templateFile)] - path = self.dest + _class.getName ().capitalize () + extension + path = self.dest + _class.getNameCap () + extension return path def targetMethodFile (self, method, templateFile): diff --git a/cpp/managementgen/schema.py b/cpp/managementgen/schema.py index 1b4ca75b44..68e9bfd4e2 100755 --- a/cpp/managementgen/schema.py +++ b/cpp/managementgen/schema.py @@ -214,7 +214,7 @@ class SchemaConfig: key = attrs.item(idx).nodeName val = attrs.item(idx).nodeValue if key == 'name': - self.name = val + self.name = makeValidCppSymbol(val) elif key == 'type': self.type = Type (val, typespec) @@ -309,7 +309,7 @@ class SchemaInst: key = attrs.item(idx).nodeName val = attrs.item(idx).nodeValue if key == 'name': - self.name = val + self.name = makeValidCppSymbol(val) elif key == 'type': self.type = Type (val, typespec) @@ -422,7 +422,7 @@ class SchemaArg: key = attrs.item(idx).nodeName val = attrs.item(idx).nodeValue if key == 'name': - self.name = val + self.name = makeValidCppSymbol(val) elif key == 'type': self.type = Type (val, typespec) @@ -496,7 +496,7 @@ class SchemaMethod: key = attrs.item(idx).nodeName val = attrs.item(idx).nodeValue if key == 'name': - self.name = val + self.name = makeValidCppSymbol(val) elif key == 'desc': self.desc = val @@ -602,7 +602,7 @@ class SchemaClass: self.hash (node) attrs = node.attributes - self.name = attrs['name'].nodeValue + self.name = makeValidCppSymbol(attrs['name'].nodeValue) children = node.childNodes for child in children: @@ -660,12 +660,18 @@ class SchemaClass: def getName (self): return self.name + def getNameCap (self): + return capitalize(self.name) + def getMethods (self): return self.methods def getEvents (self): return self.events + def getPackageNameCap (self): + return capitalize(self.packageName) + #=================================================================================== # Code Generation Functions. The names of these functions (minus the leading "gen") # match the substitution keywords in the template files. @@ -809,7 +815,7 @@ class SchemaClass: stream.write (self.name.lower ()) def genNamePackageCap (self, stream, variables): - stream.write (self.packageName.capitalize ()) + stream.write (self.getPackageNameCap ()) def genNamePackageLower (self, stream, variables): stream.write (self.packageName.lower ()) @@ -859,7 +865,7 @@ class PackageSchema: if document.tagName != 'schema': raise ValueError ("Expected 'schema' node") attrs = document.attributes - self.packageName = attrs['package'].nodeValue + self.packageName = makeValidCppSymbol(attrs['package'].nodeValue) children = document.childNodes for child in children: @@ -880,6 +886,9 @@ class PackageSchema: def getPackageName (self): return self.packageName + def getPackageNameCap (self): + return capitalize(self.packageName) + def getClasses (self): return self.classes @@ -887,7 +896,7 @@ class PackageSchema: stream.write (self.packageName.upper ()) def genPackageNameCap (self, stream, variables): - stream.write (self.packageName.capitalize ()) + stream.write (self.getPackageNameCap ()) def genClassIncludes (self, stream, variables): for _class in self.classes: @@ -907,3 +916,44 @@ class PackageSchema: _class.genNameCap (stream, variables) stream.write ("::writeSchema);\n") + +#===================================================================================== +# Utility Functions +#===================================================================================== + +# Create a valid C++ symbol from the input string so that it can be +# used in generated C++ source. For instance, change "qpid.mgmt" to +# "qpidMgmt". +# +# Input: Raw string (str) to process +# Output: String (str) suitable for use as a C++ symbol +# +# Limitations: Currently, only strips periods ('.') from strings, +# eventually should strip :'s and ,'s and ''s, oh my! +def makeValidCppSymbol(input): + output = str() + capitalize = False + + for char in input: + skip = False + + if char == ".": + capitalize = True + skip = True + + if not skip: + output += capitalize and char.upper() or char + + capitalize = False + + return output + +# Capitalize a string by /only/ forcing the first character to be +# uppercase. The rest of the string is left alone. This is different +# from str.capitalize(), which forces the first character to uppercase +# and the rest to lowercase. +# +# Input: A string (str) to capitalize +# Output: A string (str) with the first character as uppercase +def capitalize(input): + return input[0].upper() + input[1:] |
