2024-12-05 23:29:52 +00:00
|
|
|
package compiler
|
|
|
|
|
|
|
|
import (
|
2024-12-06 01:57:48 +00:00
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
"hylia/parser"
|
2024-12-05 23:29:52 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
// THE HYLIA COMPILER
|
|
|
|
|
2024-12-06 01:57:48 +00:00
|
|
|
func Compile(elements []parser.Element, outputFile string) error {
|
|
|
|
|
|
|
|
var head string
|
|
|
|
var body string
|
|
|
|
var other string
|
|
|
|
var errmsg string
|
|
|
|
|
|
|
|
errmsg += "Failed to write to the output file: %w"
|
2024-12-05 23:29:52 +00:00
|
|
|
|
|
|
|
for _, element := range elements {
|
2024-12-06 01:57:48 +00:00
|
|
|
switch element.Name {
|
|
|
|
case "head":
|
|
|
|
head += element.Content + "\n"
|
|
|
|
case "body":
|
|
|
|
body += element.Content + "\n"
|
|
|
|
default:
|
|
|
|
other += element.Content + "\n"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
file, err := os.Create(outputFile)
|
|
|
|
if err != nil {
|
|
|
|
return fmt.Errorf("Failed to create output file: %w", err)
|
|
|
|
}
|
|
|
|
defer file.Close()
|
|
|
|
|
|
|
|
// Write the HTML structure to compile into
|
|
|
|
|
|
|
|
_, err = file.WriteString("<!DOCTYPE html>\n<html>\n")
|
|
|
|
if err != nil {
|
|
|
|
return fmt.Errorf("Failed to write to the output file: %w", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if head != "" {
|
|
|
|
_, err = file.WriteString("<head>\n" + head + "</head>\n")
|
|
|
|
if err != nil {
|
|
|
|
return fmt.Errorf(errmsg, err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if body != "" {
|
|
|
|
_, err = file.WriteString("<body>\n" + body + "</body>\n")
|
|
|
|
if err != nil {
|
|
|
|
return fmt.Errorf(errmsg, err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if other != "" {
|
|
|
|
_, err = file.WriteString(other)
|
|
|
|
if err != nil {
|
|
|
|
return fmt.Errorf(errmsg, err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Close the HTML structs
|
|
|
|
_, err = file.WriteString("</html>\n")
|
|
|
|
if err != nil {
|
|
|
|
return fmt.Errorf("Failed to write to the output file: %w", err)
|
2024-12-05 23:29:52 +00:00
|
|
|
}
|
|
|
|
|
2024-12-06 01:57:48 +00:00
|
|
|
return nil
|
|
|
|
|
2024-12-05 23:29:52 +00:00
|
|
|
}
|