public function GenerateHeader($header_name)
    {
        // Variables used by some template files.
        $authors = \Peg\Lib\Settings::GetAuthors();
        $contributors = \Peg\Lib\Settings::GetContributors();
        $extension = \Peg\Lib\Settings::GetExtensionName();
        $version = \Peg\Lib\Settings::GetVersion();

        $header_object = $this->symbols->headers[$header_name];
        $header_define = $this->GetHeaderDefine($header_name);

        $header_content = "";

        // Get heading of header file
        ob_start();
            include($this->GetTemplatePath(
                $header_name,
                "headers",
                "header",
                "helpers",
                "header"
            ));
            $header_content .= ob_get_contents();
        ob_end_clean();

        // Get constants function template content
        if($header_object->HasConstants() || $header_object->HasGlobalVariables())
        {
            ob_start();
                include($this->GetTemplatePath(
                    $header_name,
                    "constants",
                    "function_decl",
                    "helpers",
                    "constant"
                ));
                $header_content .= ob_get_contents();
            ob_end_clean();

            $header_content .= "\n";
        }

        // Get enums function template content
        if($header_object->HasEnumerations())
        {
            ob_start();
                include($this->GetTemplatePath(
                    $header_name,
                    "enums",
                    "function_decl",
                    "helpers",
                    "enum"
                ));
                $header_content .= ob_get_contents();
            ob_end_clean();

            $header_content .= "\n";
        }

        // Get functions function template content
        if($header_object->HasFunctions())
        {
            ob_start();
                include($this->GetTemplatePath(
                    $header_name,
                    "functions",
                    "function_decl",
                    "helpers",
                    "function"
                ));
                $header_content .= ob_get_contents();
            ob_end_clean();

            $header_content .= "\n";
        }

        // Get classes function template content
        if($header_object->HasClasses())
        {
            foreach($header_object->namespaces as $namespace_name=>$namespace_object)
            {
                if($namespace_name == "\\")
                    $namespace_name = "";

                $namespace_name_cpp = str_replace(
                    "\\",
                    "::",
                    $namespace_name
                );

                $namespace_name_var = str_replace(
                    "\\",
                    "_",
                    $namespace_name
                );

                foreach($namespace_object->classes as $class_name=>$class_object)
                {
                    ob_start();
                        include($this->GetTemplatePath(
                            $class_name,
                            "classes",
                            "function_decl",
                            "helpers",
                            "class"
                        ));
                        $header_content .= ob_get_contents();
                    ob_end_clean();

                    $header_content .= "\n";
                }
            }
        }

        // Get footer of header file
        ob_start();
            include($this->GetTemplatePath(
                $header_name,
                "headers",
                "footer",
                "helpers",
                "header"
            ));
            $header_content .= ob_get_contents();
        ob_end_clean();

        return $header_content;
    }