docs: def _make_header_body_handler(end_body_regex,
                                node_factory,
                                has_footer=True):
      """Utility function to make a handler for header-body node.
  
      A header-body node is any node which has a single function-call
      header and a body of statements inside of it
      """
      def handler(tokens, tokens_len, body_index, function_call):
          """Handler function."""
          def _end_header_body_definition(token_index, tokens):
              """Header body termination function."""
              if end_body_regex.match(tokens[token_index].content):
                  try:
                      if tokens[token_index + 1].type == TokenType.LeftParen:
                          return True
                  except IndexError:
                      raise RuntimeError("Syntax Error")
  
              return False
  
          token_index, body = _ast_worker(tokens, tokens_len, body_index,
                                          _end_header_body_definition)
  
          extra_kwargs = {}
  
          if has_footer:
              # Handle footer
              token_index, footer = _handle_function_call(tokens,
                                                          tokens_len,
                                                          token_index)
              extra_kwargs = {"footer": footer}
  
          return (token_index,
                  node_factory(header=function_call,
                               body=body.statements,
                               line=tokens[body_index].line,
                               col=tokens[body_index].col,
                               index=body_index,
                               **extra_kwargs))
  
      return handler