开源中国 2018 年度最后一场技术盛会邀你来约~错过就要等明年啦!点此立即预约

阿债 / fountainGoMIT

指数
0
Watch 42 Star 178 Fork 39
加入码云
与超过 300 万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
静态博客生成程序,Go语言编写。 展开 收起

https://azhai.gitee.io

  • Go 36.9%
  • HTML 34.7%
  • CSS 23.2%
  • JavaScript 3.9%
  • Shell 1.3%
main.go 2.23 KB
一键复制 编辑 Web IDE 原始数据 按行查看 历史
Ryan Liu 提交于 2018-10-26 14:26 . 修改文件属性
package main
import (
"flag"
"fmt"
"os"
"plugin"
"runtime"
"fountain/article"
"fountain/utils"
bf2 "gopkg.in/russross/blackfriday.v2"
)
const VERSION = "0.41.2"
var (
serve bool //运行WEB服务
port uint //服务端口
root string //博客根目录
theme string //皮肤主题
clean bool //清理旧输出
verbose bool //输出详情
)
func init() {
flag.BoolVar(&serve, "s", false, "运行WEB服务")
flag.UintVar(&port, "p", 0, "服务端口")
flag.StringVar(&root, "r", "", "博客根目录")
flag.StringVar(&theme, "t", "", "皮肤主题")
flag.BoolVar(&clean, "c", false, "清理旧输出")
flag.BoolVar(&verbose, "v", false, "输出详情")
flag.Usage = usage
flag.Parse()
}
func usage() {
desc := `fountain version: v%s
Usage: fountain [-t theme] [-r root] [-p port] [-scv]
Options:
`
fmt.Fprintf(os.Stderr, desc, VERSION)
flag.PrintDefaults()
}
func main() {
if runtime.GOOS == "windows" {
name := "Fountain"
desc := "Fountain Static Blog Server"
utils.WinMain(name, desc, run)
} else {
run()
}
}
func run() {
site := article.NewWebsite(root)
site.LoadConfig("config.yml")
if theme != "" {
site.Conf.Theme = theme
}
site.Convert = Convert
site.Debug = func(data ...interface{}) {
if verbose {
fmt.Println(data...)
}
}
if serve || port > 0 {
if port == 0 || port > 65535 {
port = site.Conf.Port
}
fmt.Printf("Server at :%d\n", port)
} else {
if clean {
fmt.Println("Clean ...")
if len(site.Conf.Public) >= 3 {
pubDir := site.Root + site.Conf.Public
utils.CleanDir(pubDir)
}
}
fmt.Println("Build ...")
site.InitTheme()
site.BuildFiles()
}
}
func WithOptions(flags bf2.HTMLFlags) bf2.Option {
params := bf2.HTMLRendererParameters{Flags: flags}
renderer := bf2.NewHTMLRenderer(params)
return bf2.WithRenderer(renderer)
}
func Convert(source []byte, format string) []byte {
if format == "" {
return source
} else if format == "markdown" {
flags := bf2.CommonHTMLFlags | bf2.TOC
return bf2.Run(source, WithOptions(flags))
}
plug, err := plugin.Open("./" + format + ".so")
if err != nil {
panic(err)
}
symb, err := plug.Lookup("Convert")
if err != nil {
panic(err)
}
conv := symb.(func(source []byte) []byte)
return conv(source)
}

评论 ( 0 )

你可以在登录后,发表评论

搜索帮助