text: #!/usr/bin/python3
  
  from collections import namedtuple
  import sys
  
  
  INCLUDE_MARKER = "__INCLUDE_RUST_DOC__"
  
  Template = namedtuple("Template", ["header", "footer", "doc_path", "start"])
  
  
  def read_rust_doc_lines(path):
      with open(path, "r") as rust_doc:
          for line in rust_doc:
              if line.startswith('//! '):
                  yield line[4:]
              elif line.startswith('//!'):
                  yield line[3:]
              else:
                  break
  
  
  def parse_template_file(path):
      content = [line for line in open(path, "r")]
      try:
          marker_position = [n for (n, line) in enumerate(content)
                             if line.startswith(INCLUDE_MARKER)][0]
      except IndexError:
          raise Exception("Missing include marker")
      include_info = content[marker_position].strip().split('$')
      doc_path = include_info[1]
      start = None
      if len(include_info) > 2:
          start = include_info[2]
      return Template(
          header=content[0:marker_position], footer=content[marker_position+1:],
          doc_path=include_info[1], start=start,
      )
  
  
  template = parse_template_file("readme_template")
  doc = read_rust_doc_lines(template.doc_path)
  
  output = sys.stdout
  
  for line in template.header:
      output.write(line)
  
  if template.start:
      for line in doc:
          if line.startswith(template.start):
              output.write(line)
              break
  
  for line in doc:
      output.write(line)
  
  for line in template.footer:
      output.write(line)
  