code.go 672 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package parser
  2. import "github.com/usememos/memos/plugin/gomark/parser/tokenizer"
  3. type CodeParser struct {
  4. Content string
  5. }
  6. func NewCodeParser() *CodeParser {
  7. return &CodeParser{}
  8. }
  9. func (*CodeParser) Match(tokens []*tokenizer.Token) *CodeParser {
  10. if len(tokens) < 3 {
  11. return nil
  12. }
  13. if tokens[0].Type != tokenizer.Backtick {
  14. return nil
  15. }
  16. content, matched := "", false
  17. for _, token := range tokens[1:] {
  18. if token.Type == tokenizer.Newline {
  19. return nil
  20. }
  21. if token.Type == tokenizer.Backtick {
  22. matched = true
  23. break
  24. }
  25. content += token.Value
  26. }
  27. if !matched || len(content) == 0 {
  28. return nil
  29. }
  30. return &CodeParser{
  31. Content: content,
  32. }
  33. }