53 lines
1.0 KiB
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)
|
|
}
|