|  | # 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 __future__ import absolute_import | 
|  | 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\n' | 
|  |  | 
|  | return 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): | 
|  | newcontents = make_views_stub_impl(header) | 
|  | return (file, newcontents) | 
|  |  | 
|  |  | 
|  | # 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] + ' <cpp_header_dir>\n') | 
|  | 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_api_hash.h', '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)) |