# Copyright (c) 2016 The Chromium Embedded Framework Authors. All rights # reserved. Use of this source code is governed by a BSD-style license that # can be found in the LICENSE file. from cef_parser import * from make_ctocpp_impl import * def make_views_function_stub_impl(clsname, func): name = func.get_name() # Build the C++ prototype. parts = func.get_cpp_parts(True) result = make_ctocpp_impl_proto(clsname, name, func, parts)+' {' # Retrieve the function return value. retval = func.get_retval() retval_type = retval.get_retval_type() if retval_type == 'invalid': notify(name+' could not be autogenerated') # Code could not be auto-generated. result += '\n // COULD NOT IMPLEMENT DUE TO: (return value)' result += '\n #pragma message("Warning: "__FILE__": '+name+' is not implemented")' retval_default = '' else: retval_default = retval.get_retval_default(False) result += '\n NOTIMPLEMENTED();' if retval_default != '': result += '\n return ' + retval_default + ';' result += '\n}\n' return wrap_code(result) def make_views_class_stub_impl(header, cls): impl = '' clsname = cls.get_name() funcs = cls.get_static_funcs() for func in funcs: impl += make_views_function_stub_impl(clsname, func) return impl def make_views_stub_impl(header): includes = '' impl = '' allclasses = header.get_classes() for cls in allclasses: dir = cls.get_file_directory() # Only process files in the views/ directory. if dir != None and dir.find('views') == 0: cls_impl = make_views_class_stub_impl(header, cls) if cls_impl != '': impl += cls_impl includes += '#include "include/'+cls.get_file_name()+'"\n' includes += '\n#include "base/logging.h"\n' # Build the final output. result = get_copyright() + includes result += '\n\n// STATIC STUB METHODS - Do not edit by hand.\n\n' result += impl return result def write_views_stub_impl(header, file, backup): if path_exists(file): oldcontents = read_file(file) else: oldcontents = '' newcontents = make_views_stub_impl(header) if newcontents != oldcontents: if backup and oldcontents != '': backup_file(file) file_dir = os.path.split(file)[0] if not os.path.isdir(file_dir): make_dir(file_dir) write_file(file, newcontents) return True return False # Test the module. if __name__ == "__main__": import sys # Verify that the correct number of command-line arguments are provided. if len(sys.argv) < 2: sys.stderr.write('Usage: '+sys.argv[0]+' ') sys.exit() cpp_header_dir = sys.argv[1] # Create the header object. Should match the logic in translator.py. header = obj_header() header.set_root_directory(cpp_header_dir) excluded_files = ['cef_application_mac.h', 'cef_version.h'] header.add_directory(cpp_header_dir, excluded_files) header.add_directory(os.path.join(cpp_header_dir, 'views')) # Dump the result to stdout. sys.stdout.write(make_views_stub_impl(header))