mirror of
https://github.com/fengxxc/wechatmp2markdown.git
synced 2026-02-23 23:30:55 +08:00
95 lines
2.3 KiB
Go
95 lines
2.3 KiB
Go
package format
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"github.com/fengxxc/wechatmp2markdown/parse"
|
|
)
|
|
|
|
func Format(article parse.Article) string {
|
|
var result string
|
|
var titleMdStr string = formatTitle(article.Title)
|
|
result += titleMdStr
|
|
var metaMdStr string = formatMeta(article.Meta)
|
|
result += metaMdStr
|
|
var tagsMdStr string = formatTags(article.Tags)
|
|
result += tagsMdStr
|
|
var content string = formatContent(article.Content)
|
|
result += content
|
|
return result
|
|
}
|
|
|
|
func formatTitle(piece parse.Piece) string {
|
|
var prefix string
|
|
level, _ := strconv.Atoi(piece.Attrs["level"])
|
|
for i := 0; i < level; i++ {
|
|
prefix += "#"
|
|
}
|
|
return prefix + " " + piece.Val.(string) + " \n"
|
|
}
|
|
|
|
func formatMeta(meta string) string {
|
|
return meta + " \n" // TODO
|
|
}
|
|
|
|
func formatTags(tags string) string {
|
|
return tags + " \n" // TODO
|
|
}
|
|
|
|
func formatContent(blocks []parse.Paragraph) string {
|
|
var contentMdStr string
|
|
for _, block := range blocks {
|
|
for _, piece := range block.Pieces {
|
|
var pieceMdStr string
|
|
switch piece.Type {
|
|
case parse.HEADER:
|
|
pieceMdStr = formatTitle(piece)
|
|
case parse.LINK:
|
|
pieceMdStr = formatLink(piece)
|
|
case parse.NORMAL_TEXT:
|
|
pieceMdStr = piece.Val.(string)
|
|
case parse.BOLD_TEXT:
|
|
pieceMdStr = "**" + piece.Val.(string) + "**"
|
|
case parse.ITALIC_TEXT:
|
|
pieceMdStr = "*" + piece.Val.(string) + "*"
|
|
case parse.BOLD_ITALIC_TEXT:
|
|
pieceMdStr = "***" + piece.Val.(string) + "***"
|
|
case parse.IMAGE:
|
|
pieceMdStr = formatImage(piece)
|
|
case parse.TABLE:
|
|
// TODO
|
|
case parse.CODE_INLINE:
|
|
case parse.CODE_BLOCK:
|
|
pieceMdStr = formatCodeBlock(piece)
|
|
case parse.BLOCK_QUOTES:
|
|
case parse.O_LIST:
|
|
case parse.U_LIST:
|
|
case parse.HR:
|
|
}
|
|
contentMdStr += pieceMdStr
|
|
}
|
|
contentMdStr += " \n"
|
|
}
|
|
return contentMdStr
|
|
}
|
|
|
|
func formatCodeBlock(piece parse.Piece) string {
|
|
var codeMdStr string
|
|
codeMdStr += "```\n"
|
|
codeRows := piece.Val.([]string)
|
|
for _, row := range codeRows {
|
|
codeMdStr += row + "\n"
|
|
}
|
|
codeMdStr += "``` \n"
|
|
return codeMdStr
|
|
}
|
|
|
|
func formatImage(piece parse.Piece) string {
|
|
return "![" + piece.Attrs["alt"] + "](" + piece.Attrs["src"] + " \"" + piece.Attrs["title"] + "\")"
|
|
}
|
|
|
|
func formatLink(piece parse.Piece) string {
|
|
var linkMdStr string = "[" + piece.Val.(string) + "](" + piece.Attrs["href"] + ")"
|
|
return linkMdStr
|
|
}
|