feat: implement paragraph and italic parsers (#1725)

This commit is contained in:
boojack
2023-05-23 21:11:01 +08:00
committed by GitHub
parent 8c34be92a6
commit 42c653e1a4
5 changed files with 259 additions and 5 deletions

View File

@ -0,0 +1,42 @@
package parser
import "github.com/usememos/memos/plugin/gomark/parser/tokenizer"
type ItalicParser struct {
ContentTokens []*tokenizer.Token
}
func NewItalicParser() *ItalicParser {
return &ItalicParser{}
}
func (*ItalicParser) Match(tokens []*tokenizer.Token) *ItalicParser {
if len(tokens) < 3 {
return nil
}
prefixTokens := tokens[:1]
if prefixTokens[0].Type != tokenizer.Star && prefixTokens[0].Type != tokenizer.Underline {
return nil
}
prefixTokenType := prefixTokens[0].Type
contentTokens := []*tokenizer.Token{}
matched := false
for _, token := range tokens[1:] {
if token.Type == tokenizer.Newline {
return nil
}
if token.Type == prefixTokenType {
matched = true
break
}
contentTokens = append(contentTokens, token)
}
if !matched || len(contentTokens) == 0 {
return nil
}
return &ItalicParser{
ContentTokens: contentTokens,
}
}