12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- package parser
- import (
- "github.com/usememos/memos/plugin/gomark/parser/tokenizer"
- )
- type BoldParser struct {
- ContentTokens []*tokenizer.Token
- }
- func NewBoldParser() *BoldParser {
- return &BoldParser{}
- }
- func (*BoldParser) Match(tokens []*tokenizer.Token) *BoldParser {
- if len(tokens) < 5 {
- return nil
- }
- prefixTokens := tokens[:2]
- if prefixTokens[0].Type != prefixTokens[1].Type {
- return nil
- }
- prefixTokenType := prefixTokens[0].Type
- if prefixTokenType != tokenizer.Star && prefixTokenType != tokenizer.Underline {
- return nil
- }
- contentTokens := []*tokenizer.Token{}
- cursor, matched := 2, false
- for ; cursor < len(tokens)-1; cursor++ {
- token, nextToken := tokens[cursor], tokens[cursor+1]
- if token.Type == tokenizer.Newline || nextToken.Type == tokenizer.Newline {
- return nil
- }
- if token.Type == prefixTokenType && nextToken.Type == prefixTokenType {
- matched = true
- break
- }
- contentTokens = append(contentTokens, token)
- }
- if !matched {
- return nil
- }
- return &BoldParser{
- ContentTokens: contentTokens,
- }
- }
|