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, 0o644) if err != nil { return err } defer rf.Close() _, err = io.Copy(rf, &m.buf) return err }