Initial commit: added Markdown to IHK Chemnitz PDF converter with core structure and features, including YAML config, Goldmark parser, and PDF renderer.

This commit is contained in:
Sebastian Unterschütz
2026-04-09 23:09:45 +02:00
parent ca76fc4a8a
commit e98f7efa52
15 changed files with 1098 additions and 0 deletions

61
main.go Normal file
View File

@@ -0,0 +1,61 @@
package main
import (
"flag"
"fmt"
"log"
)
func main() {
inputMd := flag.String("i", "report.md", "Input Markdown file")
outputPdf := flag.String("o", "projektarbeit.pdf", "Output PDF file")
flag.Parse()
config, doc, content, err := ParseMarkdown(*inputMd)
if err != nil {
log.Fatalf("Error parsing markdown: %v", err)
}
// Pass 1: Dummy render to collect TOC info
dummyRenderer := NewIHKRenderer(config)
dummyRenderer.RenderTitlePage()
dummyRenderer.RenderTOC() // This is the placeholder
dummyRenderer.pageOffset = dummyRenderer.pdf.PageNo()
RenderAST(doc, content, dummyRenderer)
dummyRenderer.RenderBibliography()
dummyRenderer.RenderListOfTables()
dummyRenderer.RenderAppendices()
// Pass 2: Real render
renderer := NewIHKRenderer(config)
renderer.tocItems = dummyRenderer.tocItems
renderer.tableItems = dummyRenderer.tableItems
renderer.RenderTitlePage()
renderer.RenderTOC()
// Main Content
err = RenderAST(doc, content, renderer)
if err != nil {
log.Fatalf("Error rendering PDF: %v", err)
}
// 4. Bibliography
renderer.RenderBibliography()
// List of Tables
renderer.RenderListOfTables()
// 5. Appendices
renderer.RenderAppendices()
// 6. Declaration of Authenticity
renderer.RenderDeclarationPage()
err = renderer.Save(*outputPdf)
if err != nil {
log.Fatalf("Error saving PDF: %v", err)
}
fmt.Printf("Successfully generated %s\n", *outputPdf)
}