diff options
Diffstat (limited to 'doc/tools/docmodel.py')
| -rw-r--r-- | doc/tools/docmodel.py | 252 | 
1 files changed, 252 insertions, 0 deletions
| diff --git a/doc/tools/docmodel.py b/doc/tools/docmodel.py new file mode 100644 index 000000000000..ef4cd76c31dc --- /dev/null +++ b/doc/tools/docmodel.py @@ -0,0 +1,252 @@ +''' +  Copyright 2011 by the Massachusetts +  Institute of Technology.  All Rights Reserved. + +  Export of this software from the United States of America may +  require a specific license from the United States Government. +  It is the responsibility of any person or organization contemplating +  export to obtain such a license before exporting. + +  WITHIN THAT CONSTRAINT, permission to use, copy, modify, and +  distribute this software and its documentation for any purpose and +  without fee is hereby granted, provided that the above copyright +  notice appear in all copies and that both that copyright notice and +  this permission notice appear in supporting documentation, and that +  the name of M.I.T. not be used in advertising or publicity pertaining +  to distribution of the software without specific, written prior +  permission.  Furthermore if you modify this software you must label +  your software as modified software and not distribute it in such a +  fashion that it might be confused with the original M.I.T. software. +  M.I.T. makes no representations about the suitability of +  this software for any purpose.  It is provided "as is" without express +  or implied warranty. +''' +import re + +from Cheetah.Template import Template + +class Attribute(object): +    def __init__(self, **argkw): +        self.definition = argkw.get('definition') +        self.name = argkw.get('name') +        self.type = argkw.get('type') +        self.typeId = argkw.get('typeId') +        self.short_description = argkw.get('short_description') +        self.long_description = argkw.get('long_description') +        self.version = argkw.get('version') + +    def __repr__(self): +        result = list() +        for (attr,value) in self.__dict__.iteritems(): +            result.append('%s=%s' % (attr,value)) +        return 'Attribute: %s' % ','.join(result) + + +class CompositeType(): +    def __init__(self, **argkw): +        self.category = 'composite' +        self.definition = argkw.get('definition') +        self.name = argkw.get('name') +        self.name_signature = argkw.get('name_signature') +        self.Id = argkw.get('Id') +        self.initializer = argkw.get('initializer') +        self.active = argkw.get('active', False) +        self.version = argkw.get('version') +        self.return_type = argkw.get('return_type') +        self.short_description = argkw.get('short_description') +        self.long_description = argkw.get('long_description') +        self.friends = argkw.get('friends') +        self.type = argkw.get('type') +        self.attributes = self._setAttributes(argkw.get('attributes')) + +    def __repr__(self): +        result = list() +        for (attr,value) in self.__dict__.iteritems(): +            if attr == 'attributes': +                if value is not None: +                    attributes = ['%s' % a for a in value] +                    value = '\n  %s' % '\n  '.join(attributes) + +            result.append('%s: %s' % (attr,value)) +        result = '\n'.join(result) + +        return result + +    def _setAttributes(self, attributes): +        result = None +        if attributes is not None: +            result = list() +            for a in attributes: +                result.append(Attribute(**a)) + +        return result + +    def struct_reference(self, name): +        result = re.sub(r'_', '-', name) +        result = '_%s-struct' % result + +        return result + +    def macro_reference(self, name): +        result = re.sub(r'_', '-', name) +        result = '_%s-data' % result + +        return result + +class Parameter(object): +    def __init__(self, **argkw): +        self.seqno = argkw.get('seqno') +        self.name = argkw.get('name') +        self.direction = argkw.get('direction') +        self.type = argkw.get('type') +        self.typeId = argkw.get('typeId') +        self.description = argkw.get('description') +        self.version = argkw.get('version') + +    def __repr__(self): +        content = (self.name,self.direction,self.seqno,self.type,self.typeId,self.description) +        return 'Parameter: name=%s,direction=%s,seqno=%s,type=%s,typeId=%s,descr=%s' % content + +class Function(object): +    def __init__(self, **argkw): +        self.category = 'function' +        self.name = argkw.get('name') +        self.Id = argkw.get('Id') +        self.active = argkw.get('active', False) +        self.version = argkw.get('version') +        self.parameters = self._setParameters(argkw.get('parameters')) +        self.return_type = argkw.get('return_type') +        self.return_description = argkw.get('return_description') +        self.retval_description = argkw.get('retval_description') +        self.warn_description = argkw.get('warn_description') +        self.sa_description = argkw.get('sa_description') +        self.notes_description = argkw.get('notes_description') +        self.version_num = argkw.get('version_num') +        self.short_description = argkw.get('short_description') +        self.long_description = argkw.get('long_description') +        self.deprecated_description = argkw.get('deprecated_description') +        self.friends = argkw.get('friends') + +    def _setParameters(self, parameters): +        result = None +        if parameters is not None: +            result = list() +            for p in parameters: +                result.append(Parameter(**p)) + +        return result + +    def getObjectRow(self): +        result = [str(self.Id), +                  self.name, +                  self.category] + +        return ','.join(result) + +    def getObjectDescriptionRow(self): +        result = [self.Id, +                  self.active, +                  self.version, +                  self.short_description, +                  self.long_description] + +        return ','.join(result) + +    def getParameterRows(self): +        result = list() +        for p in self.parameters: +            p_row = [self.Id, +                     p.name, +                     p.seqno, +                     p.type, +                     p.typeId, +                     p.description, +                     p.version] +            result.append(','.join(p_row)) + +        return '\n'.join(result) + +    def __repr__(self): +        lines = list() +        lines.append('Category: %s' % self.category) +        lines.append('Function name: %s' % self.name) +        lines.append('Function Id: %s' % self.Id) +        parameters = ['  %s' % p for p in self.parameters] +        lines.append('Parameters:\n%s' % '\n'.join(parameters)) +        lines.append('Function return type: %s' % self.return_type) +        lines.append('Function return type description:\n%s' % self.return_description) +        lines.append('Function retval description:\n%s' % self.retval_description) +        lines.append('Function short description:\n%s' % self.short_description) +        lines.append('Function long description:\n%s' % self.long_description) +        lines.append('Warning description:\n%s' % self.warn_description) +        lines.append('See also description:\n%s' % self.sa_description) +        lines.append('NOTE description:\n%s' % self.notes_description) +        lines.append('Version introduced:\n%s' % self.version_num) +        lines.append('Deprecated description:\n%s' % self.deprecated_description) +        result = '\n'.join(lines) + +        return result + + +class DocModel(object): +    def __init__(self, **argkw): +        if len(argkw): +            self.name = argkw['name'] +            if argkw['category'] == 'function': +                self.category = 'function' +                self.function = Function(**argkw) +            elif argkw['category'] == 'composite': +                self.category = 'composite' +                self.composite = CompositeType(**argkw) + +    def __repr__(self): +        obj = getattr(self,self.category) +        print type(obj) +        return str(obj) + +    def signature(self): +        param_list = list() +        for p in self.function.parameters: +            if p.type is "... " : +                param_list.append('%s %s' % (p.type,' ')) +            else: +                param_list.append('%s %s' % (p.type, p.name)) +        param_list = ', '.join(param_list) +        result = '%s %s(%s)' % (self.function.return_type, +                                self.function.name, param_list) + +        return result + +    def save(self, path, template_path): +        f = open(template_path, 'r') +        t = Template(f.read(),self) +        out = open(path, 'w') +        out.write(str(t)) +        out.close() +        f.close() + + +class DocModelTest(DocModel): +    def __init__(self): +        doc_path = '../docutil/example.yml' +        argkw = yaml.load(open(doc_path,'r')) +        super(DocModelTest,self).__init__(**argkw) + +    def run_tests(self): +        self.test_save() + +    def test_print(self): +        print 'testing' +        print self + + +    def test_save(self): +        template_path = '../docutil/function2edit.html' + +        path = '/var/tsitkova/Sources/v10/trunk/documentation/test_doc.html' + +        self.save(path, template_path) + +if __name__ == '__main__': +    tester = DocModelTest() +    tester.run_tests() | 
