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
6421fbc6
Commit
6421fbc6
authored
Dec 16, 2023
by
Steven
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: implement list html render
parent
b00443c2
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
49 additions
and
1 deletion
+49
-1
ordered_list.go
plugin/gomark/parser/ordered_list.go
+4
-0
parser.go
plugin/gomark/parser/parser.go
+2
-0
unordered_list.go
plugin/gomark/parser/unordered_list.go
+5
-1
html.go
plugin/gomark/render/html/html.go
+30
-0
html_test.go
plugin/gomark/render/html/html_test.go
+8
-0
No files found.
plugin/gomark/parser/ordered_list.go
View file @
6421fbc6
...
@@ -43,6 +43,10 @@ func (p *OrderedListParser) Parse(tokens []*tokenizer.Token) (ast.Node, error) {
...
@@ -43,6 +43,10 @@ func (p *OrderedListParser) Parse(tokens []*tokenizer.Token) (ast.Node, error) {
}
}
contentTokens
:=
tokens
[
3
:
size
]
contentTokens
:=
tokens
[
3
:
size
]
lastToken
:=
contentTokens
[
len
(
contentTokens
)
-
1
]
if
lastToken
.
Type
==
tokenizer
.
Newline
{
contentTokens
=
contentTokens
[
:
len
(
contentTokens
)
-
1
]
}
children
,
err
:=
ParseInline
(
contentTokens
)
children
,
err
:=
ParseInline
(
contentTokens
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
...
...
plugin/gomark/parser/parser.go
View file @
6421fbc6
...
@@ -30,6 +30,8 @@ var defaultBlockParsers = []BlockParser{
...
@@ -30,6 +30,8 @@ var defaultBlockParsers = []BlockParser{
NewHorizontalRuleParser
(),
NewHorizontalRuleParser
(),
NewHeadingParser
(),
NewHeadingParser
(),
NewBlockquoteParser
(),
NewBlockquoteParser
(),
NewUnorderedListParser
(),
NewOrderedListParser
(),
NewParagraphParser
(),
NewParagraphParser
(),
NewLineBreakParser
(),
NewLineBreakParser
(),
}
}
...
...
plugin/gomark/parser/unordered_list.go
View file @
6421fbc6
...
@@ -24,10 +24,10 @@ func (*UnorderedListParser) Match(tokens []*tokenizer.Token) (int, bool) {
...
@@ -24,10 +24,10 @@ func (*UnorderedListParser) Match(tokens []*tokenizer.Token) (int, bool) {
contentTokens
:=
[]
*
tokenizer
.
Token
{}
contentTokens
:=
[]
*
tokenizer
.
Token
{}
for
_
,
token
:=
range
tokens
[
2
:
]
{
for
_
,
token
:=
range
tokens
[
2
:
]
{
contentTokens
=
append
(
contentTokens
,
token
)
if
token
.
Type
==
tokenizer
.
Newline
{
if
token
.
Type
==
tokenizer
.
Newline
{
break
break
}
}
contentTokens
=
append
(
contentTokens
,
token
)
}
}
if
len
(
contentTokens
)
==
0
{
if
len
(
contentTokens
)
==
0
{
return
0
,
false
return
0
,
false
...
@@ -44,6 +44,10 @@ func (p *UnorderedListParser) Parse(tokens []*tokenizer.Token) (ast.Node, error)
...
@@ -44,6 +44,10 @@ func (p *UnorderedListParser) Parse(tokens []*tokenizer.Token) (ast.Node, error)
symbolToken
:=
tokens
[
0
]
symbolToken
:=
tokens
[
0
]
contentTokens
:=
tokens
[
2
:
size
]
contentTokens
:=
tokens
[
2
:
size
]
lastToken
:=
contentTokens
[
len
(
contentTokens
)
-
1
]
if
lastToken
.
Type
==
tokenizer
.
Newline
{
contentTokens
=
contentTokens
[
:
len
(
contentTokens
)
-
1
]
}
children
,
err
:=
ParseInline
(
contentTokens
)
children
,
err
:=
ParseInline
(
contentTokens
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
...
...
plugin/gomark/render/html/html.go
View file @
6421fbc6
...
@@ -39,6 +39,10 @@ func (r *HTMLRender) RenderNode(node ast.Node) {
...
@@ -39,6 +39,10 @@ func (r *HTMLRender) RenderNode(node ast.Node) {
r
.
renderHorizontalRule
(
n
)
r
.
renderHorizontalRule
(
n
)
case
*
ast
.
Blockquote
:
case
*
ast
.
Blockquote
:
r
.
renderBlockquote
(
n
)
r
.
renderBlockquote
(
n
)
case
*
ast
.
UnorderedList
:
r
.
renderUnorderedList
(
n
)
case
*
ast
.
OrderedList
:
r
.
renderOrderedList
(
n
)
case
*
ast
.
Bold
:
case
*
ast
.
Bold
:
r
.
renderBold
(
n
)
r
.
renderBold
(
n
)
case
*
ast
.
Italic
:
case
*
ast
.
Italic
:
...
@@ -113,6 +117,32 @@ func (r *HTMLRender) renderBlockquote(node *ast.Blockquote) {
...
@@ -113,6 +117,32 @@ func (r *HTMLRender) renderBlockquote(node *ast.Blockquote) {
}
}
}
}
func
(
r
*
HTMLRender
)
renderUnorderedList
(
node
*
ast
.
UnorderedList
)
{
prevSibling
,
nextSibling
:=
node
.
PrevSibling
(),
node
.
NextSibling
()
if
prevSibling
==
nil
||
prevSibling
.
Type
()
!=
ast
.
UnorderedListNode
{
r
.
output
.
WriteString
(
"<ul>"
)
}
r
.
output
.
WriteString
(
"<li>"
)
r
.
RenderNodes
(
node
.
Children
)
r
.
output
.
WriteString
(
"</li>"
)
if
nextSibling
==
nil
||
nextSibling
.
Type
()
!=
ast
.
UnorderedListNode
{
r
.
output
.
WriteString
(
"</ul>"
)
}
}
func
(
r
*
HTMLRender
)
renderOrderedList
(
node
*
ast
.
OrderedList
)
{
prevSibling
,
nextSibling
:=
node
.
PrevSibling
(),
node
.
NextSibling
()
if
prevSibling
==
nil
||
prevSibling
.
Type
()
!=
ast
.
OrderedListNode
{
r
.
output
.
WriteString
(
"<ol>"
)
}
r
.
output
.
WriteString
(
"<li>"
)
r
.
RenderNodes
(
node
.
Children
)
r
.
output
.
WriteString
(
"</li>"
)
if
nextSibling
==
nil
||
nextSibling
.
Type
()
!=
ast
.
OrderedListNode
{
r
.
output
.
WriteString
(
"</ol>"
)
}
}
func
(
r
*
HTMLRender
)
renderText
(
node
*
ast
.
Text
)
{
func
(
r
*
HTMLRender
)
renderText
(
node
*
ast
.
Text
)
{
r
.
output
.
WriteString
(
node
.
Content
)
r
.
output
.
WriteString
(
node
.
Content
)
}
}
...
...
plugin/gomark/render/html/html_test.go
View file @
6421fbc6
...
@@ -34,6 +34,14 @@ func TestHTMLRender(t *testing.T) {
...
@@ -34,6 +34,14 @@ func TestHTMLRender(t *testing.T) {
text
:
"#article #memo"
,
text
:
"#article #memo"
,
expected
:
`<p><span>#article</span> <span>#memo</span></p>`
,
expected
:
`<p><span>#article</span> <span>#memo</span></p>`
,
},
},
{
text
:
"* Hello
\n
* world!"
,
expected
:
`<ul><li>Hello</li><li>world!</li></ul>`
,
},
{
text
:
"1. Hello
\n
2. world
\n
* !"
,
expected
:
`<ol><li>Hello</li><li>world</li></ol><ul><li>!</li></ul>`
,
},
}
}
for
_
,
test
:=
range
tests
{
for
_
,
test
:=
range
tests
{
...
...
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