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
8ed827cd
Commit
8ed827cd
authored
Jan 18, 2024
by
Steven
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: update table node delimiter
parent
05c0aeb7
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
45 additions
and
37 deletions
+45
-37
markdown_service.go
api/v2/markdown_service.go
+4
-8
block.go
plugin/gomark/ast/block.go
+3
-8
table.go
plugin/gomark/parser/table.go
+16
-13
table_test.go
plugin/gomark/parser/table_test.go
+13
-2
tokenizer.go
plugin/gomark/parser/tokenizer/tokenizer.go
+4
-1
markdown_service.proto
proto/api/v2/markdown_service.proto
+1
-1
README.md
proto/gen/api/v2/README.md
+1
-1
markdown_service.pb.go
proto/gen/api/v2/markdown_service.pb.go
+3
-3
No files found.
api/v2/markdown_service.go
View file @
8ed827cd
...
...
@@ -172,10 +172,8 @@ func convertToASTNode(node *apiv2pb.Node) ast.Node {
func
convertTableToASTNode
(
node
*
apiv2pb
.
Node
)
*
ast
.
Table
{
table
:=
&
ast
.
Table
{
Header
:
node
.
GetTableNode
()
.
Header
,
}
for
_
,
d
:=
range
node
.
GetTableNode
()
.
Delimiter
{
table
.
Delimiter
=
append
(
table
.
Delimiter
,
int
(
d
))
Header
:
node
.
GetTableNode
()
.
Header
,
Delimiter
:
node
.
GetTableNode
()
.
Delimiter
,
}
for
_
,
row
:=
range
node
.
GetTableNode
()
.
Rows
{
table
.
Rows
=
append
(
table
.
Rows
,
row
.
Cells
)
...
...
@@ -185,10 +183,8 @@ func convertTableToASTNode(node *apiv2pb.Node) *ast.Table {
func
convertTableFromASTNode
(
node
*
ast
.
Table
)
*
apiv2pb
.
TableNode
{
table
:=
&
apiv2pb
.
TableNode
{
Header
:
node
.
Header
,
}
for
_
,
d
:=
range
node
.
Delimiter
{
table
.
Delimiter
=
append
(
table
.
Delimiter
,
int32
(
d
))
Header
:
node
.
Header
,
Delimiter
:
node
.
Delimiter
,
}
for
_
,
row
:=
range
node
.
Rows
{
table
.
Rows
=
append
(
table
.
Rows
,
&
apiv2pb
.
TableNode_Row
{
Cells
:
row
})
...
...
plugin/gomark/ast/block.go
View file @
8ed827cd
...
...
@@ -198,9 +198,8 @@ func (n *MathBlock) Restore() string {
type
Table
struct
{
BaseBlock
Header
[]
string
// Delimiter is the list of delimiter counts.
Delimiter
[]
int
Header
[]
string
Delimiter
[]
string
Rows
[][]
string
}
...
...
@@ -215,11 +214,7 @@ func (n *Table) Restore() string {
}
result
+=
"|
\n
"
for
_
,
d
:=
range
n
.
Delimiter
{
symbol
:=
""
for
i
:=
0
;
i
<
d
;
i
++
{
symbol
+=
"-"
}
result
+=
fmt
.
Sprintf
(
"| %s "
,
symbol
)
result
+=
fmt
.
Sprintf
(
"| %s "
,
d
)
}
result
+=
"|
\n
"
for
index
,
row
:=
range
n
.
Rows
{
...
...
plugin/gomark/parser/table.go
View file @
8ed827cd
...
...
@@ -26,21 +26,21 @@ func (*TableParser) Match(tokens []*tokenizer.Token) (int, bool) {
return
0
,
false
}
align
Tokens
:=
[]
*
tokenizer
.
Token
{}
delimiter
Tokens
:=
[]
*
tokenizer
.
Token
{}
for
_
,
token
:=
range
tokens
[
len
(
headerTokens
)
+
1
:
]
{
if
token
.
Type
==
tokenizer
.
Newline
{
break
}
else
{
alignTokens
=
append
(
align
Tokens
,
token
)
delimiterTokens
=
append
(
delimiter
Tokens
,
token
)
}
}
if
len
(
alignTokens
)
<
5
||
len
(
tokens
)
<
len
(
headerTokens
)
+
len
(
align
Tokens
)
+
3
{
if
len
(
delimiterTokens
)
<
5
||
len
(
tokens
)
<
len
(
headerTokens
)
+
len
(
delimiter
Tokens
)
+
3
{
return
0
,
false
}
rowTokens
:=
[]
*
tokenizer
.
Token
{}
for
index
,
token
:=
range
tokens
[
len
(
headerTokens
)
+
len
(
align
Tokens
)
+
2
:
]
{
temp
:=
len
(
headerTokens
)
+
len
(
align
Tokens
)
+
2
+
index
for
index
,
token
:=
range
tokens
[
len
(
headerTokens
)
+
len
(
delimiter
Tokens
)
+
2
:
]
{
temp
:=
len
(
headerTokens
)
+
len
(
delimiter
Tokens
)
+
2
+
index
if
token
.
Type
==
tokenizer
.
Newline
&&
temp
!=
len
(
tokens
)
-
1
&&
tokens
[
temp
+
1
]
.
Type
!=
tokenizer
.
Pipe
{
break
}
else
{
...
...
@@ -60,20 +60,23 @@ func (*TableParser) Match(tokens []*tokenizer.Token) (int, bool) {
return
0
,
false
}
// Check
align
.
if
len
(
align
Tokens
)
<
5
{
// Check
delimiter
.
if
len
(
delimiter
Tokens
)
<
5
{
return
0
,
false
}
alignCells
,
ok
:=
matchTableCellTokens
(
align
Tokens
)
alignCells
,
ok
:=
matchTableCellTokens
(
delimiter
Tokens
)
if
alignCells
!=
headerCells
||
!
ok
{
return
0
,
false
}
for
_
,
t
:=
range
tokenizer
.
Split
(
align
Tokens
,
tokenizer
.
Pipe
)
{
for
_
,
t
:=
range
tokenizer
.
Split
(
delimiter
Tokens
,
tokenizer
.
Pipe
)
{
delimiterTokens
:=
t
[
1
:
len
(
t
)
-
1
]
if
len
(
delimiterTokens
)
<
3
{
return
0
,
false
}
for
_
,
token
:=
range
delimiterTokens
{
if
(
delimiterTokens
[
0
]
.
Type
!=
tokenizer
.
Colon
&&
delimiterTokens
[
0
]
.
Type
!=
tokenizer
.
Hyphen
)
||
(
delimiterTokens
[
len
(
delimiterTokens
)
-
1
]
.
Type
!=
tokenizer
.
Colon
&&
delimiterTokens
[
len
(
delimiterTokens
)
-
1
]
.
Type
!=
tokenizer
.
Hyphen
)
{
return
0
,
false
}
for
_
,
token
:=
range
delimiterTokens
[
1
:
len
(
delimiterTokens
)
-
1
]
{
if
token
.
Type
!=
tokenizer
.
Hyphen
{
return
0
,
false
}
...
...
@@ -95,7 +98,7 @@ func (*TableParser) Match(tokens []*tokenizer.Token) (int, bool) {
}
}
return
len
(
headerTokens
)
+
len
(
align
Tokens
)
+
len
(
rowTokens
)
+
2
,
true
return
len
(
headerTokens
)
+
len
(
delimiter
Tokens
)
+
len
(
rowTokens
)
+
2
,
true
}
func
(
p
*
TableParser
)
Parse
(
tokens
[]
*
tokenizer
.
Token
)
(
ast
.
Node
,
error
)
{
...
...
@@ -109,14 +112,14 @@ func (p *TableParser) Parse(tokens []*tokenizer.Token) (ast.Node, error) {
alignTokens
:=
rawRows
[
1
]
rowTokens
:=
rawRows
[
2
:
]
header
:=
make
([]
string
,
0
)
delimiter
:=
make
([]
int
,
0
)
delimiter
:=
make
([]
string
,
0
)
rows
:=
make
([][]
string
,
0
)
for
_
,
t
:=
range
tokenizer
.
Split
(
headerTokens
,
tokenizer
.
Pipe
)
{
header
=
append
(
header
,
tokenizer
.
Stringify
(
t
[
1
:
len
(
t
)
-
1
]))
}
for
_
,
t
:=
range
tokenizer
.
Split
(
alignTokens
,
tokenizer
.
Pipe
)
{
delimiter
=
append
(
delimiter
,
len
(
t
[
1
:
len
(
t
)
-
1
]))
delimiter
=
append
(
delimiter
,
tokenizer
.
Stringify
(
t
[
1
:
len
(
t
)
-
1
]))
}
for
_
,
row
:=
range
rowTokens
{
cells
:=
make
([]
string
,
0
)
...
...
plugin/gomark/parser/table_test.go
View file @
8ed827cd
...
...
@@ -18,7 +18,7 @@ func TestTableParser(t *testing.T) {
text
:
"| header |
\n
| --- |
\n
| cell |
\n
"
,
table
:
&
ast
.
Table
{
Header
:
[]
string
{
"header"
},
Delimiter
:
[]
int
{
3
},
Delimiter
:
[]
string
{
"---"
},
Rows
:
[][]
string
{
{
"cell"
},
},
...
...
@@ -28,7 +28,18 @@ func TestTableParser(t *testing.T) {
text
:
"| header1 | header2 |
\n
| --- | ---- |
\n
| cell1 | cell2 |
\n
| cell3 | cell4 |"
,
table
:
&
ast
.
Table
{
Header
:
[]
string
{
"header1"
,
"header2"
},
Delimiter
:
[]
int
{
3
,
4
},
Delimiter
:
[]
string
{
"---"
,
"----"
},
Rows
:
[][]
string
{
{
"cell1"
,
"cell2"
},
{
"cell3"
,
"cell4"
},
},
},
},
{
text
:
"| header1 | header2 |
\n
| :-- | ----: |
\n
| cell1 | cell2 |
\n
| cell3 | cell4 |"
,
table
:
&
ast
.
Table
{
Header
:
[]
string
{
"header1"
,
"header2"
},
Delimiter
:
[]
string
{
":--"
,
"----:"
},
Rows
:
[][]
string
{
{
"cell1"
,
"cell2"
},
{
"cell3"
,
"cell4"
},
...
...
plugin/gomark/parser/tokenizer/tokenizer.go
View file @
8ed827cd
...
...
@@ -21,6 +21,7 @@ const (
DollarSign
TokenType
=
"$"
EqualSign
TokenType
=
"="
Pipe
TokenType
=
"|"
Colon
TokenType
=
":"
Backslash
TokenType
=
"
\\
"
Newline
TokenType
=
"
\n
"
Space
TokenType
=
" "
...
...
@@ -83,6 +84,8 @@ func Tokenize(text string) []*Token {
tokens
=
append
(
tokens
,
NewToken
(
EqualSign
,
"="
))
case
'|'
:
tokens
=
append
(
tokens
,
NewToken
(
Pipe
,
"|"
))
case
':'
:
tokens
=
append
(
tokens
,
NewToken
(
Colon
,
":"
))
case
'\\'
:
tokens
=
append
(
tokens
,
NewToken
(
Backslash
,
`\`
))
case
'\n'
:
...
...
@@ -142,4 +145,4 @@ func Split(tokens []*Token, delimiter TokenType) [][]*Token {
result
=
append
(
result
,
current
)
}
return
result
}
\ No newline at end of file
}
proto/api/v2/markdown_service.proto
View file @
8ed827cd
...
...
@@ -130,7 +130,7 @@ message MathBlockNode {
message
TableNode
{
repeated
string
header
=
1
;
repeated
int32
delimiter
=
2
;
repeated
string
delimiter
=
2
;
message
Row
{
repeated
string
cells
=
1
;
...
...
proto/gen/api/v2/README.md
View file @
8ed827cd
...
...
@@ -1330,7 +1330,7 @@
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| header |
[
string
](
#string
)
| repeated | |
| delimiter |
[
int32
](
#int32
)
| repeated | |
| delimiter |
[
string
](
#string
)
| repeated | |
| rows |
[
TableNode.Row
](
#memos-api-v2-TableNode-Row
)
| repeated | |
...
...
proto/gen/api/v2/markdown_service.pb.go
View file @
8ed827cd
...
...
@@ -1166,7 +1166,7 @@ type TableNode struct {
unknownFields
protoimpl
.
UnknownFields
Header
[]
string
`protobuf:"bytes,1,rep,name=header,proto3" json:"header,omitempty"`
Delimiter
[]
int32
`protobuf:"varint,2,rep,packed
,name=delimiter,proto3" json:"delimiter,omitempty"`
Delimiter
[]
string
`protobuf:"bytes,2,rep
,name=delimiter,proto3" json:"delimiter,omitempty"`
Rows
[]
*
TableNode_Row
`protobuf:"bytes,3,rep,name=rows,proto3" json:"rows,omitempty"`
}
...
...
@@ -1209,7 +1209,7 @@ func (x *TableNode) GetHeader() []string {
return
nil
}
func
(
x
*
TableNode
)
GetDelimiter
()
[]
int32
{
func
(
x
*
TableNode
)
GetDelimiter
()
[]
string
{
if
x
!=
nil
{
return
x
.
Delimiter
}
...
...
@@ -2101,7 +2101,7 @@ var file_api_v2_markdown_service_proto_rawDesc = []byte{
0x6c
,
0x65
,
0x4e
,
0x6f
,
0x64
,
0x65
,
0x12
,
0x16
,
0x0a
,
0x06
,
0x68
,
0x65
,
0x61
,
0x64
,
0x65
,
0x72
,
0x18
,
0x01
,
0x20
,
0x03
,
0x28
,
0x09
,
0x52
,
0x06
,
0x68
,
0x65
,
0x61
,
0x64
,
0x65
,
0x72
,
0x12
,
0x1c
,
0x0a
,
0x09
,
0x64
,
0x65
,
0x6c
,
0x69
,
0x6d
,
0x69
,
0x74
,
0x65
,
0x72
,
0x18
,
0x02
,
0x20
,
0x03
,
0x28
,
0x0
5
,
0x52
,
0x09
,
0x64
,
0x65
,
0x6c
,
0x69
,
0x6d
,
0x69
,
0x74
,
0x65
,
0x72
,
0x12
,
0x2f
,
0x0a
,
0x04
,
0x0
9
,
0x52
,
0x09
,
0x64
,
0x65
,
0x6c
,
0x69
,
0x6d
,
0x69
,
0x74
,
0x65
,
0x72
,
0x12
,
0x2f
,
0x0a
,
0x04
,
0x72
,
0x6f
,
0x77
,
0x73
,
0x18
,
0x03
,
0x20
,
0x03
,
0x28
,
0x0b
,
0x32
,
0x1b
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x32
,
0x2e
,
0x54
,
0x61
,
0x62
,
0x6c
,
0x65
,
0x4e
,
0x6f
,
0x64
,
0x65
,
0x2e
,
0x52
,
0x6f
,
0x77
,
0x52
,
0x04
,
0x72
,
0x6f
,
0x77
,
0x73
,
0x1a
,
0x1b
,
0x0a
,
...
...
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