123456789101112131415161718192021222324252627282930313233343536373839404142 |
- 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,
- }
- }
|