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
8c34be92
Unverified
Commit
8c34be92
authored
May 23, 2023
by
boojack
Committed by
GitHub
May 23, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(gomark): add bold parser (#1724)
parent
fa53a255
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
146 additions
and
11 deletions
+146
-11
bold.go
plugin/gomark/parser/bold.go
+46
-0
bold_test.go
plugin/gomark/parser/bold_test.go
+88
-0
heading.go
plugin/gomark/parser/heading.go
+6
-5
heading_test.go
plugin/gomark/parser/heading_test.go
+6
-6
No files found.
plugin/gomark/parser/bold.go
0 → 100644
View file @
8c34be92
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
len
(
prefixTokens
)
!=
2
||
prefixTokens
[
0
]
.
Type
!=
prefixTokens
[
1
]
.
Type
{
return
nil
}
prefixTokenType
:=
prefixTokens
[
0
]
.
Type
contentTokens
:=
[]
*
tokenizer
.
Token
{}
cursor
:=
2
for
;
cursor
<
len
(
tokens
)
-
1
;
cursor
++
{
token
,
nextToken
:=
tokens
[
cursor
],
tokens
[
cursor
+
1
]
if
token
.
Type
==
tokenizer
.
Newline
||
nextToken
.
Type
==
tokenizer
.
Newline
{
break
}
if
token
.
Type
==
prefixTokenType
&&
nextToken
.
Type
==
prefixTokenType
{
break
}
contentTokens
=
append
(
contentTokens
,
token
)
}
if
cursor
!=
len
(
tokens
)
-
2
{
return
nil
}
return
&
BoldParser
{
ContentTokens
:
contentTokens
,
}
}
plugin/gomark/parser/bold_test.go
0 → 100644
View file @
8c34be92
package
parser
import
(
"testing"
"github.com/stretchr/testify/require"
"github.com/usememos/memos/plugin/gomark/parser/tokenizer"
)
func
TestBoldParser
(
t
*
testing
.
T
)
{
tests
:=
[]
struct
{
text
string
bold
*
BoldParser
}{
{
text
:
"*Hello world!"
,
bold
:
nil
,
},
{
text
:
"**Hello**"
,
bold
:
&
BoldParser
{
ContentTokens
:
[]
*
tokenizer
.
Token
{
{
Type
:
tokenizer
.
Text
,
Value
:
"Hello"
,
},
},
},
},
{
text
:
"** Hello **"
,
bold
:
&
BoldParser
{
ContentTokens
:
[]
*
tokenizer
.
Token
{
{
Type
:
tokenizer
.
Space
,
Value
:
" "
,
},
{
Type
:
tokenizer
.
Text
,
Value
:
"Hello"
,
},
{
Type
:
tokenizer
.
Space
,
Value
:
" "
,
},
},
},
},
{
text
:
"** Hello * *"
,
bold
:
nil
,
},
{
text
:
"* * Hello **"
,
bold
:
nil
,
},
{
text
:
`** Hello
**`
,
bold
:
nil
,
},
{
text
:
`**Hello \n**`
,
bold
:
&
BoldParser
{
ContentTokens
:
[]
*
tokenizer
.
Token
{
{
Type
:
tokenizer
.
Text
,
Value
:
"Hello"
,
},
{
Type
:
tokenizer
.
Space
,
Value
:
" "
,
},
{
Type
:
tokenizer
.
Text
,
Value
:
`\n`
,
},
},
},
},
}
for
_
,
test
:=
range
tests
{
tokens
:=
tokenizer
.
Tokenize
(
test
.
text
)
bold
:=
NewBoldParser
()
require
.
Equal
(
t
,
test
.
bold
,
bold
.
Match
(
tokens
))
}
}
plugin/gomark/parser/heading.go
View file @
8c34be92
...
...
@@ -4,16 +4,16 @@ import (
"github.com/usememos/memos/plugin/gomark/parser/tokenizer"
)
type
Heading
Tokeniz
er
struct
{
type
Heading
Pars
er
struct
{
Level
int
ContentTokens
[]
*
tokenizer
.
Token
}
func
NewHeading
Tokenizer
()
*
HeadingTokeniz
er
{
return
&
Heading
Tokeniz
er
{}
func
NewHeading
Parser
()
*
HeadingPars
er
{
return
&
Heading
Pars
er
{}
}
func
(
*
Heading
Tokenizer
)
Match
(
tokens
[]
*
tokenizer
.
Token
)
*
HeadingTokeniz
er
{
func
(
*
Heading
Parser
)
Match
(
tokens
[]
*
tokenizer
.
Token
)
*
HeadingPars
er
{
cursor
:=
0
for
_
,
token
:=
range
tokens
{
if
token
.
Type
==
tokenizer
.
Hash
{
...
...
@@ -40,12 +40,13 @@ func (*HeadingTokenizer) Match(tokens []*tokenizer.Token) *HeadingTokenizer {
break
}
contentTokens
=
append
(
contentTokens
,
token
)
cursor
++
}
if
len
(
contentTokens
)
==
0
{
return
nil
}
return
&
Heading
Tokeniz
er
{
return
&
Heading
Pars
er
{
Level
:
level
,
ContentTokens
:
contentTokens
,
}
...
...
plugin/gomark/parser/heading_test.go
View file @
8c34be92
...
...
@@ -10,7 +10,7 @@ import (
func
TestHeadingParser
(
t
*
testing
.
T
)
{
tests
:=
[]
struct
{
text
string
heading
*
Heading
Tokeniz
er
heading
*
Heading
Pars
er
}{
{
text
:
"*Hello world!"
,
...
...
@@ -18,7 +18,7 @@ func TestHeadingParser(t *testing.T) {
},
{
text
:
"## Hello World!"
,
heading
:
&
Heading
Tokeniz
er
{
heading
:
&
Heading
Pars
er
{
Level
:
2
,
ContentTokens
:
[]
*
tokenizer
.
Token
{
{
...
...
@@ -38,7 +38,7 @@ func TestHeadingParser(t *testing.T) {
},
{
text
:
"# # Hello World"
,
heading
:
&
Heading
Tokeniz
er
{
heading
:
&
Heading
Pars
er
{
Level
:
1
,
ContentTokens
:
[]
*
tokenizer
.
Token
{
{
...
...
@@ -71,7 +71,7 @@ func TestHeadingParser(t *testing.T) {
{
text
:
`# 123
Hello World!`
,
heading
:
&
Heading
Tokeniz
er
{
heading
:
&
Heading
Pars
er
{
Level
:
1
,
ContentTokens
:
[]
*
tokenizer
.
Token
{
{
...
...
@@ -89,7 +89,7 @@ Hello World!`,
for
_
,
test
:=
range
tests
{
tokens
:=
tokenizer
.
Tokenize
(
test
.
text
)
heading
Tokenizer
:=
NewHeadingTokeniz
er
()
require
.
Equal
(
t
,
test
.
heading
,
heading
Tokenizer
.
Match
(
tokens
))
heading
:=
NewHeadingPars
er
()
require
.
Equal
(
t
,
test
.
heading
,
heading
.
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