# This script combines FIRLangRef_Header.md with the auto-generated Dialect/FIRLangRef.md
# for the purpose of creating an introduction header/paragraph for FIRLangRef.html.

import os

# These paths are relative to flang/docs in the build directory, not source, as that's where this tool is executed.
HEADER_PATH = os.path.join("SourceHtml", "FIR", "FIRLangRef_Header.md")
DOCS_PATH = os.path.join("Dialect", "FIRLangRef.md")
OUTPUT_PATH = os.path.join("SourceHtml", "FIRLangRef.md")

# 1. Writes line 1 from docs to output, (comment line that the file is autogenerated)
# 2. Adds a new line
# 3. Writes the entire header to the output file
# 4. Writes the remainder of docs to the output file
with open(OUTPUT_PATH, "w") as output:
    with open(HEADER_PATH, "r") as header, open(DOCS_PATH, "r") as docs:
        output.write(docs.readline())
        output.write("\n")
        output.write(header.read())
        output.write(docs.read())
