Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
canifa_note
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
canifa_note
Commits
a07d11e8
Unverified
Commit
a07d11e8
authored
May 26, 2023
by
boojack
Committed by
GitHub
May 26, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: tag parser (#1745)
parent
dbc85fe7
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
85 additions
and
0 deletions
+85
-0
tag.go
plugin/gomark/parser/tag.go
+34
-0
tag_test.go
plugin/gomark/parser/tag_test.go
+51
-0
No files found.
plugin/gomark/parser/tag.go
0 → 100644
View file @
a07d11e8
package
parser
import
"github.com/usememos/memos/plugin/gomark/parser/tokenizer"
type
TagParser
struct
{
ContentTokens
[]
*
tokenizer
.
Token
}
func
NewTagParser
()
*
TagParser
{
return
&
TagParser
{}
}
func
(
*
TagParser
)
Match
(
tokens
[]
*
tokenizer
.
Token
)
*
TagParser
{
if
len
(
tokens
)
<
2
{
return
nil
}
if
tokens
[
0
]
.
Type
!=
tokenizer
.
Hash
{
return
nil
}
contentTokens
:=
[]
*
tokenizer
.
Token
{}
for
_
,
token
:=
range
tokens
[
1
:
]
{
if
token
.
Type
==
tokenizer
.
Newline
||
token
.
Type
==
tokenizer
.
Space
||
token
.
Type
==
tokenizer
.
Hash
{
break
}
contentTokens
=
append
(
contentTokens
,
token
)
}
if
len
(
contentTokens
)
==
0
{
return
nil
}
return
&
TagParser
{
ContentTokens
:
contentTokens
,
}
}
plugin/gomark/parser/tag_test.go
0 → 100644
View file @
a07d11e8
package
parser
import
(
"testing"
"github.com/stretchr/testify/require"
"github.com/usememos/memos/plugin/gomark/parser/tokenizer"
)
func
TestTagParser
(
t
*
testing
.
T
)
{
tests
:=
[]
struct
{
text
string
tag
*
TagParser
}{
{
text
:
"*Hello world"
,
tag
:
nil
,
},
{
text
:
"# Hello World"
,
tag
:
nil
,
},
{
text
:
"#tag"
,
tag
:
&
TagParser
{
ContentTokens
:
[]
*
tokenizer
.
Token
{
{
Type
:
tokenizer
.
Text
,
Value
:
"tag"
,
},
},
},
},
{
text
:
"#tag/subtag"
,
tag
:
&
TagParser
{
ContentTokens
:
[]
*
tokenizer
.
Token
{
{
Type
:
tokenizer
.
Text
,
Value
:
"tag/subtag"
,
},
},
},
},
}
for
_
,
test
:=
range
tests
{
tokens
:=
tokenizer
.
Tokenize
(
test
.
text
)
require
.
Equal
(
t
,
test
.
tag
,
NewTagParser
()
.
Match
(
tokens
))
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment