alpha p10
This commit is contained in:
25
src/doc/doc.go
Normal file
25
src/doc/doc.go
Normal file
@@ -0,0 +1,25 @@
|
||||
package doc
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/pkg/browser"
|
||||
)
|
||||
|
||||
func Open() error {
|
||||
fmt.Println("Opening documentation in browser")
|
||||
|
||||
tmpFile := filepath.Join(os.TempDir(), "doc.html")
|
||||
content := `<html><body><pre>
|
||||
This feature is not implemented yet. It will be once the doc site
|
||||
is up and running, for now read through the core/ files and examples.
|
||||
</pre></body></html>`
|
||||
|
||||
if err := os.WriteFile(tmpFile, []byte(content), 0644); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return browser.OpenFile(tmpFile)
|
||||
}
|
||||
@@ -48,16 +48,21 @@ func Project(dir string) error {
|
||||
if err := os.Chdir(dir); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
name := getName()
|
||||
|
||||
write("www/index.lua", `local fes = require("fes")
|
||||
local site = fes.fes()
|
||||
|
||||
-- site.copyright = fes.util.copyright("https://example.com", "%s")
|
||||
|
||||
site:h1("Hello, World!")
|
||||
|
||||
return site`)
|
||||
return site`, name)
|
||||
write("Fes.toml", `[app]
|
||||
|
||||
name = "%s"
|
||||
version = "0.0.1"
|
||||
authors = ["%s"]`, dir, getName())
|
||||
authors = ["%s"]`, dir, name)
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"fes/src/config"
|
||||
"github.com/fatih/color"
|
||||
"github.com/gomarkdown/markdown"
|
||||
"github.com/gomarkdown/markdown/html"
|
||||
@@ -19,16 +20,13 @@ import (
|
||||
"github.com/pelletier/go-toml/v2"
|
||||
lua "github.com/yuin/gopher-lua"
|
||||
"html/template"
|
||||
"fes/src/config"
|
||||
)
|
||||
|
||||
/* structure of all data passed to page via fes.bus */
|
||||
type reqData struct {
|
||||
path string
|
||||
params map[string]string
|
||||
}
|
||||
|
||||
/* loads directories to routes */
|
||||
func handleDir(entries []os.DirEntry, dir string, routes map[string]string, base string, isStatic bool) error {
|
||||
for _, entry := range entries {
|
||||
path := filepath.Join(dir, entry.Name())
|
||||
@@ -72,7 +70,6 @@ func basePath(base string) string {
|
||||
return base
|
||||
}
|
||||
|
||||
/* fixes empty TOML keys (e.g., key=) */
|
||||
func fixMalformedToml(content string) string {
|
||||
re := regexp.MustCompile(`(?m)^(\s*\w+\s*=\s*)$`)
|
||||
return re.ReplaceAllStringFunc(content, func(match string) string {
|
||||
@@ -85,7 +82,6 @@ func fixMalformedToml(content string) string {
|
||||
})
|
||||
}
|
||||
|
||||
/* converts markdown to html */
|
||||
func markdownToHTML(mdText string) string {
|
||||
extensions := parser.CommonExtensions | parser.AutoHeadingIDs | parser.NoEmptyLineBeforeBlock
|
||||
p := parser.NewWithExtensions(extensions)
|
||||
@@ -96,7 +92,6 @@ func markdownToHTML(mdText string) string {
|
||||
return string(markdown.Render(doc, renderer))
|
||||
}
|
||||
|
||||
/* load Lua include modules used in core/ into their table */
|
||||
func loadIncludeModules(L *lua.LState, includeDir string) *lua.LTable {
|
||||
app := L.NewTable()
|
||||
ents, err := os.ReadDir(includeDir)
|
||||
@@ -109,6 +104,12 @@ func loadIncludeModules(L *lua.LState, includeDir string) *lua.LTable {
|
||||
}
|
||||
base := strings.TrimSuffix(e.Name(), ".lua")
|
||||
path := filepath.Join(includeDir, e.Name())
|
||||
if _, err := os.Stat(path); err != nil {
|
||||
tbl := L.NewTable()
|
||||
tbl.RawSetString("error", lua.LString(fmt.Sprintf("file not found: %s", path)))
|
||||
app.RawSetString(base, tbl)
|
||||
continue
|
||||
}
|
||||
if err := L.DoFile(path); err != nil {
|
||||
tbl := L.NewTable()
|
||||
tbl.RawSetString("error", lua.LString(err.Error()))
|
||||
@@ -118,7 +119,7 @@ func loadIncludeModules(L *lua.LState, includeDir string) *lua.LTable {
|
||||
val := L.Get(-1)
|
||||
L.Pop(1)
|
||||
tbl, ok := val.(*lua.LTable)
|
||||
if !ok {
|
||||
if !ok || tbl == nil {
|
||||
tbl = L.NewTable()
|
||||
}
|
||||
app.RawSetString(base, tbl)
|
||||
@@ -126,7 +127,6 @@ func loadIncludeModules(L *lua.LState, includeDir string) *lua.LTable {
|
||||
return app
|
||||
}
|
||||
|
||||
/* load and execute lua scripts with core and user modules */
|
||||
func loadLua(luaDir string, entry string, cfg *config.MyConfig, requestData reqData) (string, error) {
|
||||
L := lua.NewState()
|
||||
defer L.Close()
|
||||
@@ -197,8 +197,7 @@ func loadLua(luaDir string, entry string, cfg *config.MyConfig, requestData reqD
|
||||
}
|
||||
}
|
||||
|
||||
includeDir := filepath.Join(luaDir, "include")
|
||||
mod.RawSetString("app", loadIncludeModules(L, includeDir))
|
||||
mod.RawSetString("app", loadIncludeModules(L, filepath.Join(".", "include")))
|
||||
|
||||
if cfg != nil {
|
||||
site := L.NewTable()
|
||||
@@ -253,7 +252,6 @@ func loadLua(luaDir string, entry string, cfg *config.MyConfig, requestData reqD
|
||||
return "", nil
|
||||
}
|
||||
|
||||
/* generate html index page for archive directories */
|
||||
func generateArchiveIndex(fsPath string, urlPath string) (string, error) {
|
||||
info, err := os.Stat(fsPath)
|
||||
if err != nil {
|
||||
@@ -344,7 +342,6 @@ func generateArchiveIndex(fsPath string, urlPath string) (string, error) {
|
||||
return b.String(), nil
|
||||
}
|
||||
|
||||
/* start http server with features */
|
||||
func Start(dir string) error {
|
||||
if err := os.Chdir(dir); err != nil {
|
||||
return fmt.Errorf("failed to change directory to %s: %w", dir, err)
|
||||
|
||||
Reference in New Issue
Block a user