document/markdown.go

53 lines
1.0 KiB
Go

package document
import (
"fmt"
"apigo.cc/go/cast"
"apigo.cc/go/file"
)
// Markdown 封装了纯 Markdown 文档的读写,使其符合 Document 接口。
type Markdown struct {
filename string
Content string
}
// OpenMarkdown 打开一个 Markdown 文件。
func OpenMarkdown(filename string) (*Markdown, error) {
m := &Markdown{filename: filename}
if file.Exists(filename) {
content, err := file.Read(filename)
if err != nil {
return nil, err
}
m.Content = content
}
return m, nil
}
// ToJSON 返回包含内容的 JSON 字符串。
func (m *Markdown) ToJSON() string {
res, _ := cast.ToJSON(map[string]string{
"content": m.Content,
})
return res
}
// ToMarkdown 直接返回其内容。
func (m *Markdown) ToMarkdown() string {
return m.Content
}
// Save 保存为 Markdown 文件。
func (m *Markdown) Save(filename ...string) error {
path := m.filename
if len(filename) > 0 && filename[0] != "" {
path = filename[0]
}
if path == "" {
return fmt.Errorf("no filename specified")
}
return file.Write(path, m.Content)
}