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
2a6f0548
Commit
2a6f0548
authored
Dec 28, 2023
by
Steven
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: update auto link parser
parent
30dca18b
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
34 additions
and
11 deletions
+34
-11
auto_link.go
plugin/gomark/parser/auto_link.go
+27
-11
auto_link_test.go
plugin/gomark/parser/auto_link_test.go
+7
-0
No files found.
plugin/gomark/parser/auto_link.go
View file @
2a6f0548
...
@@ -2,6 +2,7 @@ package parser
...
@@ -2,6 +2,7 @@ package parser
import
(
import
(
"errors"
"errors"
"net/url"
"github.com/usememos/memos/plugin/gomark/ast"
"github.com/usememos/memos/plugin/gomark/ast"
"github.com/usememos/memos/plugin/gomark/parser/tokenizer"
"github.com/usememos/memos/plugin/gomark/parser/tokenizer"
...
@@ -17,24 +18,36 @@ func (*AutoLinkParser) Match(tokens []*tokenizer.Token) (int, bool) {
...
@@ -17,24 +18,36 @@ func (*AutoLinkParser) Match(tokens []*tokenizer.Token) (int, bool) {
if
len
(
tokens
)
<
3
{
if
len
(
tokens
)
<
3
{
return
0
,
false
return
0
,
false
}
}
if
tokens
[
0
]
.
Type
!=
tokenizer
.
LessThan
{
return
0
,
false
hasAngleBrackets
:=
false
if
tokens
[
0
]
.
Type
==
tokenizer
.
LessThan
{
hasAngleBrackets
=
true
}
}
urlTokens
:=
[]
*
tokenizer
.
Token
{}
for
_
,
token
:=
range
tokens
[
1
:
]
{
contentTokens
:=
[]
*
tokenizer
.
Token
{}
for
_
,
token
:=
range
tokens
{
if
token
.
Type
==
tokenizer
.
Newline
||
token
.
Type
==
tokenizer
.
Space
{
if
token
.
Type
==
tokenizer
.
Newline
||
token
.
Type
==
tokenizer
.
Space
{
return
0
,
false
break
}
}
if
token
.
Type
==
tokenizer
.
GreaterThan
{
contentTokens
=
append
(
contentTokens
,
token
)
if
hasAngleBrackets
&&
token
.
Type
==
tokenizer
.
GreaterThan
{
break
break
}
}
urlTokens
=
append
(
urlTokens
,
token
)
}
}
if
2
+
len
(
urlTokens
)
>
len
(
tokens
)
{
if
hasAngleBrackets
&&
contentTokens
[
len
(
contentTokens
)
-
1
]
.
Type
!=
tokenizer
.
GreaterThan
{
return
0
,
false
return
0
,
false
}
}
return
2
+
len
(
urlTokens
),
true
content
:=
tokenizer
.
Stringify
(
contentTokens
)
if
!
hasAngleBrackets
{
u
,
err
:=
url
.
Parse
(
content
)
if
err
!=
nil
||
u
.
Scheme
==
""
||
u
.
Host
==
""
{
return
0
,
false
}
}
return
len
(
contentTokens
),
true
}
}
func
(
p
*
AutoLinkParser
)
Parse
(
tokens
[]
*
tokenizer
.
Token
)
(
ast
.
Node
,
error
)
{
func
(
p
*
AutoLinkParser
)
Parse
(
tokens
[]
*
tokenizer
.
Token
)
(
ast
.
Node
,
error
)
{
...
@@ -43,8 +56,11 @@ func (p *AutoLinkParser) Parse(tokens []*tokenizer.Token) (ast.Node, error) {
...
@@ -43,8 +56,11 @@ func (p *AutoLinkParser) Parse(tokens []*tokenizer.Token) (ast.Node, error) {
return
nil
,
errors
.
New
(
"not matched"
)
return
nil
,
errors
.
New
(
"not matched"
)
}
}
urlTokens
:=
tokens
[
1
:
size
-
1
]
url
:=
tokenizer
.
Stringify
(
tokens
[
:
size
])
if
tokens
[
0
]
.
Type
==
tokenizer
.
LessThan
&&
tokens
[
len
(
tokens
)
-
1
]
.
Type
==
tokenizer
.
GreaterThan
{
url
=
tokenizer
.
Stringify
(
tokens
[
1
:
len
(
tokens
)
-
1
])
}
return
&
ast
.
AutoLink
{
return
&
ast
.
AutoLink
{
URL
:
tokenizer
.
Stringify
(
urlTokens
)
,
URL
:
url
,
},
nil
},
nil
}
}
plugin/gomark/parser/auto_link_test.go
View file @
2a6f0548
...
@@ -24,7 +24,14 @@ func TestAutoLinkParser(t *testing.T) {
...
@@ -24,7 +24,14 @@ func TestAutoLinkParser(t *testing.T) {
URL
:
"https://example.com"
,
URL
:
"https://example.com"
,
},
},
},
},
{
text
:
"https://example.com"
,
link
:
&
ast
.
AutoLink
{
URL
:
"https://example.com"
,
},
},
}
}
for
_
,
test
:=
range
tests
{
for
_
,
test
:=
range
tests
{
tokens
:=
tokenizer
.
Tokenize
(
test
.
text
)
tokens
:=
tokenizer
.
Tokenize
(
test
.
text
)
node
,
_
:=
NewAutoLinkParser
()
.
Parse
(
tokens
)
node
,
_
:=
NewAutoLinkParser
()
.
Parse
(
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