From bdd8cb4b106f905e976a41a70318eb1cfeb175b6 Mon Sep 17 00:00:00 2001 From: fengxxc Date: Wed, 1 Dec 2021 11:00:24 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=B2=BE=E7=AE=80=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- format/format.go | 61 ++++++++++++++++++++++++------------------------ parse/model.go | 7 ++---- parse/parse.go | 33 +++++++++++++++----------- 3 files changed, 51 insertions(+), 50 deletions(-) diff --git a/format/format.go b/format/format.go index cf67422..13dc55b 100644 --- a/format/format.go +++ b/format/format.go @@ -36,39 +36,38 @@ func formatTags(tags string) string { return tags + " \n" // TODO } -func formatContent(blocks []parse.Paragraph) string { +func formatContent(pieces []parse.Piece) 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 + for _, piece := range 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: + case parse.BR: + pieceMdStr = " \n" } - contentMdStr += " \n" + contentMdStr += pieceMdStr } return contentMdStr } diff --git a/parse/model.go b/parse/model.go index 2fe0166..f55d565 100644 --- a/parse/model.go +++ b/parse/model.go @@ -4,7 +4,7 @@ type Article struct { Title Piece Meta string Tags string - Content []Paragraph + Content []Piece } type Header struct { @@ -12,10 +12,6 @@ type Header struct { Text string } -type Paragraph struct { - Pieces []Piece -} - // go不资瓷泛型可真是难受... type Value interface{} @@ -42,4 +38,5 @@ const ( O_LIST // 有序列表 U_LIST // 无序列表 HR // 分隔线 + BR // 换行 ) diff --git a/parse/parse.go b/parse/parse.go index 665de0a..81a83cf 100644 --- a/parse/parse.go +++ b/parse/parse.go @@ -14,7 +14,7 @@ import ( "github.com/PuerkitoBio/goquery" ) -func parseSection(s *goquery.Selection) Paragraph { +func parseSection(s *goquery.Selection) []Piece { var piece []Piece s.Children().Each(func(i int, s *goquery.Selection) { var p Piece @@ -40,10 +40,10 @@ func parseSection(s *goquery.Selection) Paragraph { // fmt.Printf("%+v\n", t) piece = append(piece, p) }) - return Paragraph{piece} + return piece } -func parseHeader(s *goquery.Selection) Paragraph { +func parseHeader(s *goquery.Selection) []Piece { var level int switch { case s.Is("h1"): @@ -61,16 +61,16 @@ func parseHeader(s *goquery.Selection) Paragraph { } attr := map[string]string{"level": strconv.Itoa(level)} p := Piece{HEADER, removeBrAndBlank(s.Text()), attr} - return Paragraph{[]Piece{p}} + return []Piece{p} } -func parsePre(s *goquery.Selection) Paragraph { +func parsePre(s *goquery.Selection) []Piece { var codeRows []string s.Find("code").Each(func(i int, s *goquery.Selection) { codeRows = append(codeRows, s.Text()) }) p := Piece{CODE_BLOCK, codeRows, nil} - return Paragraph{[]Piece{p}} + return []Piece{p} } func ParseFromReader(r io.Reader) Article { @@ -101,25 +101,30 @@ func ParseFromReader(r io.Reader) Article { // p[style="line-height: 1.5em;"] => 项目列表(有序/无序) // section[style=".*text-align:center"]>img => 居中段落(图片) content := mainContent.Find("#js_content") - var sections []Paragraph + // var sections []Paragraph + var pieces []Piece content.Children().Each(func(i int, s *goquery.Selection) { - var paragraph Paragraph + // var paragraph Paragraph if s.Is("pre") || s.Is("section.code-snippet__fix") { // 代码块 - paragraph = parsePre(s) + // paragraph = parsePre(s) + pieces = append(pieces, parsePre(s)...) } else if s.Is("p") || s.Is("section") { - paragraph = parseSection(s) + // paragraph = parseSection(s) + pieces = append(pieces, parseSection(s)...) } else if s.Is("h1") || s.Is("h2") || s.Is("h3") || s.Is("h4") || s.Is("h5") || s.Is("h6") { - paragraph = parseHeader(s) + // paragraph = parseHeader(s) + pieces = append(pieces, parseHeader(s)...) } else if s.Is("ol") { // TODO } else if s.Is("ul") { // TODO } - // sections[i] = block - sections = append(sections, paragraph) + // sections = append(sections, paragraph) + pieces = append(pieces, Piece{BR, nil, nil}) }) - article.Content = sections + // article.Content = sections + article.Content = pieces return article }