84 lines
1.8 KiB
Go
84 lines
1.8 KiB
Go
|
|
package markdown
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"bytes"
|
|||
|
|
"io"
|
|||
|
|
"os"
|
|||
|
|
"strings"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// Builder 用于拼接 Markdown 文本(原 stock internal/logic/a、gostock internal/logic/libs 中重复实现)。
|
|||
|
|
type Builder struct {
|
|||
|
|
buf bytes.Buffer
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// MarkdownBuilder 兼容旧项目中的类型名。
|
|||
|
|
type MarkdownBuilder = Builder
|
|||
|
|
|
|||
|
|
func NewBuilder() *Builder {
|
|||
|
|
return &Builder{}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// NewMarkdownBuilder 兼容旧项目中的构造函数名。
|
|||
|
|
func NewMarkdownBuilder() *Builder {
|
|||
|
|
return NewBuilder()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func (m *Builder) Title(title string) {
|
|||
|
|
m.buf.WriteString("# " + title + "\n\n")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func (m *Builder) Catalog(text string) {
|
|||
|
|
m.buf.WriteString("## " + text + "\n\n")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func (m *Builder) Text(text string) {
|
|||
|
|
m.buf.WriteString(text + "\n\n")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func (m *Builder) KvText(key, val string) {
|
|||
|
|
m.buf.WriteString(key + " :" + val + " \n")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func (m *Builder) BR() {
|
|||
|
|
m.buf.WriteString("\n")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func (m *Builder) Code(lang, code string) {
|
|||
|
|
m.buf.WriteString("```" + lang + "\n")
|
|||
|
|
m.buf.WriteString(code + "\n")
|
|||
|
|
m.buf.WriteString("```\n\n")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Table 生成 Markdown 表格。
|
|||
|
|
func (m *Builder) Table(catalog string, headers []string, rows [][]string) {
|
|||
|
|
if catalog != "" {
|
|||
|
|
m.buf.WriteString("## " + catalog + "\n")
|
|||
|
|
}
|
|||
|
|
m.buf.WriteString("| " + strings.Join(headers, " | ") + " |\n")
|
|||
|
|
|
|||
|
|
m.buf.WriteString("| ")
|
|||
|
|
for _, header := range headers {
|
|||
|
|
m.buf.WriteString(strings.Repeat("-", len(header)) + "|")
|
|||
|
|
}
|
|||
|
|
m.buf.WriteString("\n")
|
|||
|
|
for _, row := range rows {
|
|||
|
|
m.buf.WriteString("| " + strings.Join(row, " | ") + " |\n")
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func (m *Builder) Build() string {
|
|||
|
|
return m.buf.String()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func (m *Builder) SaveToFile(filePath string) error {
|
|||
|
|
rf, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, os.ModePerm)
|
|||
|
|
if err != nil {
|
|||
|
|
return err
|
|||
|
|
}
|
|||
|
|
defer rf.Close()
|
|||
|
|
|
|||
|
|
_, err = io.Copy(rf, &m.buf)
|
|||
|
|
return err
|
|||
|
|
}
|