Expose a function to build headers and log errors

Refactors header generation and error logging into a public function
that can be used by library consumers.
diff --git a/compiler/back_end/cpp/emboss_codegen_cpp.py b/compiler/back_end/cpp/emboss_codegen_cpp.py
index 77bcb84..ed5e66e 100644
--- a/compiler/back_end/cpp/emboss_codegen_cpp.py
+++ b/compiler/back_end/cpp/emboss_codegen_cpp.py
@@ -48,16 +48,30 @@
   return parser.parse_args(argv[1:])
 
 
-def _show_errors(errors, ir, flags):
+def _show_errors(errors, ir, color_output):
   """Prints errors with source code snippets."""
   source_codes = {}
   for module in ir.module:
     source_codes[module.source_file_name] = module.source_text
-  use_color = (flags.color_output == "always" or
-               (flags.color_output in ("auto", "if_tty") and
+  use_color = (color_output == "always" or
+               (color_output in ("auto", "if_tty") and
                 os.isatty(sys.stderr.fileno())))
   print(error.format_errors(errors, source_codes, use_color), file=sys.stderr)
 
+def generate_headers_and_log_errors(ir, color_output):
+  """Generates a C++ header and logs any errors.
+
+  Arguments:
+    ir: EmbossIr of the module.
+    color_output: "always", "never", "if_tty", "auto"
+
+  Returns:
+    A tuple of (header, errors)
+  """
+  header, errors = header_generator.generate_header(ir)
+  if errors:
+    _show_errors(errors, ir, color_output)
+  return (header, errors)
 
 def main(flags):
   if flags.input_file:
@@ -65,9 +79,8 @@
       ir = ir_pb2.EmbossIr.from_json(f.read())
   else:
     ir = ir_pb2.EmbossIr.from_json(sys.stdin.read())
-  header, errors = header_generator.generate_header(ir)
+  header, errors = generate_headers_and_log_errors(ir, flags.color_output)
   if errors:
-    _show_errors(errors, ir, flags)
     return 1
   if flags.output_file:
     with open(flags.output_file, "w") as f: