Move Wiki Pages to MD

This commit is contained in:
2026-04-30 20:43:53 +02:00
parent 78133efdf4
commit 18eab086cc
4 changed files with 106 additions and 102 deletions
+48 -12
View File
@@ -22,8 +22,10 @@ import (
const (
defaultDeployManifestName = ".wiki_deploy_manifest.json"
defaultEditSummary = "Auto-generated from native builder"
managedStartMarker = "<!-- sow-topdata-wiki:managed:start -->"
managedEndMarker = "<!-- sow-topdata-wiki:managed:end -->"
managedStartMarker = "[//]: # (sow-topdata-wiki:managed:start)"
managedEndMarker = "[//]: # (sow-topdata-wiki:managed:end)"
legacyManagedStartMarker = "<!-- sow-topdata-wiki:managed:start -->"
legacyManagedEndMarker = "<!-- sow-topdata-wiki:managed:end -->"
)
var defaultManagedNamespaces = []string{"classes", "feat", "itemtypes", "races", "skills", "spells", "meta"}
@@ -177,14 +179,15 @@ func collectLocalPages(sourceDir string, namespaces []string) (map[string]wikiDe
if err != nil {
return err
}
if d.IsDir() || filepath.Ext(path) != ".html" {
ext := filepath.Ext(path)
if d.IsDir() || (ext != ".md" && ext != ".html") {
return nil
}
rel, err := filepath.Rel(sourceDir, path)
if err != nil {
return err
}
pageID := strings.TrimSuffix(filepath.ToSlash(rel), ".html")
pageID := strings.TrimSuffix(filepath.ToSlash(rel), ext)
pageID = strings.ReplaceAll(pageID, "/", ":")
namespace := strings.SplitN(pageID, ":", 2)[0]
if _, ok := namespaceSet[namespace]; !ok {
@@ -197,7 +200,7 @@ func collectLocalPages(sourceDir string, namespaces []string) (map[string]wikiDe
content := string(raw)
pages[pageID] = wikiDeployPage{
PageID: pageID,
Title: extractHTMLTitle(content, pageID),
Title: extractPageTitle(content, pageID),
Namespace: namespace,
Content: content,
Hash: computeManagedHash(content),
@@ -310,12 +313,11 @@ func computeManagedHash(content string) string {
}
func extractManagedRegion(content string) (string, bool) {
start := strings.Index(content, managedStartMarker)
end := strings.Index(content, managedEndMarker)
startMarker, _, start, end := managedRegionBounds(content)
if start < 0 || end < 0 || end < start {
return "", false
}
start += len(managedStartMarker)
start += len(startMarker)
return strings.TrimSpace(content[start:end]), true
}
@@ -324,13 +326,47 @@ func mergeManagedContent(existing, generated string) string {
if !ok {
return generated
}
start := strings.Index(existing, managedStartMarker)
end := strings.Index(existing, managedEndMarker)
_, endMarker, start, end := managedRegionBounds(existing)
if start < 0 || end < 0 || end < start {
return generated
}
end += len(managedEndMarker)
return existing[:start+len(managedStartMarker)] + "\n" + generatedRegion + "\n" + existing[end:]
end += len(endMarker)
return existing[:start] + managedStartMarker + "\n" + generatedRegion + "\n" + managedEndMarker + existing[end:]
}
func managedRegionBounds(content string) (string, string, int, int) {
for _, markers := range [][2]string{
{managedStartMarker, managedEndMarker},
{legacyManagedStartMarker, legacyManagedEndMarker},
} {
start := strings.Index(content, markers[0])
end := strings.Index(content, markers[1])
if start >= 0 && end >= 0 {
return markers[0], markers[1], start, end
}
}
return "", "", -1, -1
}
func extractPageTitle(content, fallback string) string {
if title := extractMarkdownTitle(content); title != "" {
return title
}
return extractHTMLTitle(content, fallback)
}
func extractMarkdownTitle(content string) string {
for _, line := range strings.Split(content, "\n") {
trimmed := strings.TrimSpace(line)
if !strings.HasPrefix(trimmed, "# ") {
continue
}
title := strings.TrimSpace(strings.TrimPrefix(trimmed, "# "))
if title != "" {
return title
}
}
return ""
}
func extractHTMLTitle(content, fallback string) string {