diff --git a/pkg/message/message.go b/pkg/message/message.go index d1cb017..e460f45 100644 --- a/pkg/message/message.go +++ b/pkg/message/message.go @@ -23,7 +23,7 @@ type MessageList struct { Next string `json:"next,omitempty"` } -func (m *Message) Decode(elements []MessageELement) error { +func (m *Message) Decode(elements []MessageElement) error { raw := "" for _, e := range elements { raw += e.Stringify() @@ -32,7 +32,7 @@ func (m *Message) Decode(elements []MessageELement) error { return nil } -func (m *Message) Encode() ([]MessageELement, error) { +func (m *Message) Encode() ([]MessageElement, error) { if m.Content == "" { return nil, nil } diff --git a/pkg/message/message_element.go b/pkg/message/message_element.go index 5fdf4a3..fb47ec4 100644 --- a/pkg/message/message_element.go +++ b/pkg/message/message_element.go @@ -1,6 +1,6 @@ package message -type MessageELement interface { +type MessageElement interface { Tag() string Stringify() string Alias() []string @@ -14,7 +14,7 @@ func (e *noAliasMessageElement) Alias() []string { } type childrenMessageElement struct { - Children []MessageELement + Children []MessageElement } func (e *childrenMessageElement) stringifyChildren() string { diff --git a/pkg/message/message_element_basic.go b/pkg/message/message_element_basic.go index 10813d3..8890ebb 100644 --- a/pkg/message/message_element_basic.go +++ b/pkg/message/message_element_basic.go @@ -83,7 +83,7 @@ func (e *MessageElementA) Stringify() string { } func init() { - regsiterParser("at", func(n *html.Node) (MessageELement, error) { + regsiterParser("at", func(n *html.Node) (MessageElement, error) { attrMap := attrList2Map(n.Attr) return &MessageElementAt{ Id: attrMap["id"].Val, @@ -92,14 +92,14 @@ func init() { Type: attrMap["type"].Val, }, nil }) - regsiterParser("sharp", func(n *html.Node) (MessageELement, error) { + regsiterParser("sharp", func(n *html.Node) (MessageElement, error) { attrMap := attrList2Map(n.Attr) return &MessageElementSharp{ Id: attrMap["id"].Val, Name: attrMap["name"].Val, }, nil }) - regsiterParser("a", func(n *html.Node) (MessageELement, error) { + regsiterParser("a", func(n *html.Node) (MessageElement, error) { attrMap := attrList2Map(n.Attr) return &MessageElementA{ Href: attrMap["href"].Val, diff --git a/pkg/message/message_element_decorative.go b/pkg/message/message_element_decorative.go index e044f45..d7322c8 100644 --- a/pkg/message/message_element_decorative.go +++ b/pkg/message/message_element_decorative.go @@ -1,6 +1,8 @@ package message -import "golang.org/x/net/html" +import ( + "golang.org/x/net/html" +) type MessageElementStrong struct { *childrenMessageElement @@ -60,49 +62,49 @@ func (e *MessageElementSpl) Stringify() string { return e.stringifyByTag(e.Tag()) } -type MessageELementCode struct { +type MessageElementCode struct { *childrenMessageElement *noAliasMessageElement } -func (e *MessageELementCode) Tag() string { +func (e *MessageElementCode) Tag() string { return "code" } -func (e *MessageELementCode) Stringify() string { +func (e *MessageElementCode) Stringify() string { return e.stringifyByTag(e.Tag()) } -type MessageELementSup struct { +type MessageElementSup struct { *childrenMessageElement *noAliasMessageElement } -func (e *MessageELementSup) Tag() string { +func (e *MessageElementSup) Tag() string { return "sup" } -func (e *MessageELementSup) Stringify() string { +func (e *MessageElementSup) Stringify() string { return e.stringifyByTag(e.Tag()) } -type MessageELementSub struct { +type MessageElementSub struct { *childrenMessageElement *noAliasMessageElement } -func (e *MessageELementSub) Tag() string { +func (e *MessageElementSub) Tag() string { return "sub" } -func (e *MessageELementSub) Stringify() string { +func (e *MessageElementSub) Stringify() string { return e.stringifyByTag(e.Tag()) } func init() { - regsiterParserMulti([]string{"b", "strong"}, func(n *html.Node) (MessageELement, error) { - var children []MessageELement - err := parseHtmlChildrenNode(n, func(e MessageELement) { + regsiterParserMulti([]string{"b", "strong"}, func(n *html.Node) (MessageElement, error) { + var children []MessageElement + err := parseHtmlChildrenNode(n, func(e MessageElement) { children = append(children, e) }) if err != nil { @@ -114,20 +116,75 @@ func init() { }, }, nil }) - regsiterParserMulti([]string{"i", "em"}, func(n *html.Node) (MessageELement, error) { - return nil, nil + regsiterParserMulti([]string{"i", "em"}, func(n *html.Node) (MessageElement, error) { + var children []MessageElement + err := parseHtmlChildrenNode(n, func(e MessageElement) { + children = append(children, e) + }) + if err != nil { + return nil, err + } + return &MessageElementEm{ + &childrenMessageElement{ + Children: children, + }, + }, nil }) - regsiterParserMulti([]string{"s", "ins"}, func(n *html.Node) (MessageELement, error) { - return nil, nil + regsiterParserMulti([]string{"s", "ins"}, func(n *html.Node) (MessageElement, error) { + var children []MessageElement + err := parseHtmlChildrenNode(n, func(e MessageElement) { + children = append(children, e) + }) + if err != nil { + return nil, err + } + return &MessageElementIns{ + &childrenMessageElement{ + Children: children, + }, + }, nil }) - regsiterParser("spl", func(n *html.Node) (MessageELement, error) { - return nil, nil + regsiterParser("spl", func(n *html.Node) (MessageElement, error) { + var children []MessageElement + err := parseHtmlChildrenNode(n, func(e MessageElement) { + children = append(children, e) + }) + if err != nil { + return nil, err + } + return &MessageElementSpl{ + childrenMessageElement: &childrenMessageElement{ + Children: children, + }, + }, nil }) - regsiterParser("code", func(n *html.Node) (MessageELement, error) { - return nil, nil + regsiterParser("code", func(n *html.Node) (MessageElement, error) { + var children []MessageElement + err := parseHtmlChildrenNode(n, func(e MessageElement) { + children = append(children, e) + }) + if err != nil { + return nil, err + } + return &MessageElementSpl{ + childrenMessageElement: &childrenMessageElement{ + Children: children, + }, + }, nil }) - regsiterParser("sup", func(n *html.Node) (MessageELement, error) { - return nil, nil + regsiterParser("sup", func(n *html.Node) (MessageElement, error) { + var children []MessageElement + err := parseHtmlChildrenNode(n, func(e MessageElement) { + children = append(children, e) + }) + if err != nil { + return nil, err + } + return &MessageElementSub{ + childrenMessageElement: &childrenMessageElement{ + Children: children, + }, + }, nil }) } diff --git a/pkg/message/message_element_resource.go b/pkg/message/message_element_resource.go index 5ddcaea..3025b09 100644 --- a/pkg/message/message_element_resource.go +++ b/pkg/message/message_element_resource.go @@ -115,7 +115,7 @@ func (e *MessageElementFile) Stringify() string { } func init() { - regsiterParser("img", func(n *html.Node) (MessageELement, error) { + regsiterParser("img", func(n *html.Node) (MessageElement, error) { attrMap := attrList2Map(n.Attr) result := &MessageElementImg{ Src: attrMap["src"].Val, @@ -142,7 +142,7 @@ func init() { } return result, nil }) - regsiterParser("audio", func(n *html.Node) (MessageELement, error) { + regsiterParser("audio", func(n *html.Node) (MessageElement, error) { attrMap := attrList2Map(n.Attr) result := &MessageElementAudio{ Src: attrMap["src"].Val, @@ -155,7 +155,7 @@ func init() { } return result, nil }) - regsiterParser("video", func(n *html.Node) (MessageELement, error) { + regsiterParser("video", func(n *html.Node) (MessageElement, error) { attrMap := attrList2Map(n.Attr) result := &MessageElementVedio{ Src: attrMap["src"].Val, @@ -168,7 +168,7 @@ func init() { } return result, nil }) - regsiterParser("file", func(n *html.Node) (MessageELement, error) { + regsiterParser("file", func(n *html.Node) (MessageElement, error) { attrMap := attrList2Map(n.Attr) result := &MessageElementFile{ Src: attrMap["src"].Val, diff --git a/pkg/message/parser.go b/pkg/message/parser.go index 8fcc978..c144a2e 100644 --- a/pkg/message/parser.go +++ b/pkg/message/parser.go @@ -7,7 +7,7 @@ import ( "golang.org/x/net/html" ) -type messageElemenParser func(n *html.Node) (MessageELement, error) +type messageElemenParser func(n *html.Node) (MessageElement, error) var _parserOfTag = make(map[string]messageElemenParser) @@ -31,7 +31,7 @@ func regsiterParserMulti(tags []string, parserFunc messageElemenParser) { func init() { } -func parseHtmlNode(n *html.Node, callback func(e MessageELement)) error { +func parseHtmlNode(n *html.Node, callback func(e MessageElement)) error { parsed := false if n.Type == html.ElementNode { var parserOfTagFunc messageElemenParser @@ -57,7 +57,7 @@ func parseHtmlNode(n *html.Node, callback func(e MessageELement)) error { } return nil } -func parseHtmlChildrenNode(n *html.Node, callback func(e MessageELement)) error { +func parseHtmlChildrenNode(n *html.Node, callback func(e MessageElement)) error { for c := n.FirstChild; c != nil; c = c.NextSibling { err := parseHtmlNode(c, callback) if err != nil { @@ -67,10 +67,10 @@ func parseHtmlChildrenNode(n *html.Node, callback func(e MessageELement)) error return nil } -func Parse(source string) ([]MessageELement, error) { +func Parse(source string) ([]MessageElement, error) { doc, _ := html.Parse(bytes.NewReader([]byte(source))) - var result []MessageELement - err := parseHtmlNode(doc, func(e MessageELement) { + var result []MessageElement + err := parseHtmlNode(doc, func(e MessageElement) { if e != nil { result = append(result, e) } @@ -81,6 +81,6 @@ func Parse(source string) ([]MessageELement, error) { return result, nil } -func Stringify([]MessageELement) (string, error) { +func Stringify([]MessageElement) (string, error) { return "", nil }