diff --git a/api/v2/markdown_service.go b/api/v2/markdown_service.go index 96804379..7e901893 100644 --- a/api/v2/markdown_service.go +++ b/api/v2/markdown_service.go @@ -65,6 +65,8 @@ func convertFromASTNode(rawNode ast.Node) *apiv2pb.Node { node.Node = &apiv2pb.Node_MathBlockNode{MathBlockNode: &apiv2pb.MathBlockNode{Content: n.Content}} case *ast.Table: node.Node = &apiv2pb.Node_TableNode{TableNode: convertTableFromASTNode(n)} + case *ast.EmbeddedContent: + node.Node = &apiv2pb.Node_EmbeddedContentNode{EmbeddedContentNode: &apiv2pb.EmbeddedContentNode{ResourceName: n.ResourceName}} case *ast.Text: node.Node = &apiv2pb.Node_TextNode{TextNode: &apiv2pb.TextNode{Content: n.Content}} case *ast.Bold: @@ -142,6 +144,8 @@ func convertToASTNode(node *apiv2pb.Node) ast.Node { return &ast.MathBlock{Content: n.MathBlockNode.Content} case *apiv2pb.Node_TableNode: return convertTableToASTNode(node) + case *apiv2pb.Node_EmbeddedContentNode: + return &ast.EmbeddedContent{ResourceName: n.EmbeddedContentNode.ResourceName} case *apiv2pb.Node_TextNode: return &ast.Text{Content: n.TextNode.Content} case *apiv2pb.Node_BoldNode: diff --git a/plugin/gomark/ast/ast.go b/plugin/gomark/ast/ast.go index b78f42c1..ae09fd7f 100644 --- a/plugin/gomark/ast/ast.go +++ b/plugin/gomark/ast/ast.go @@ -16,6 +16,7 @@ const ( TaskListNode MathBlockNode TableNode + EmbeddedContentNode // Inline nodes. TextNode BoldNode diff --git a/plugin/gomark/ast/block.go b/plugin/gomark/ast/block.go index 91165cc0..7581d6f1 100644 --- a/plugin/gomark/ast/block.go +++ b/plugin/gomark/ast/block.go @@ -228,3 +228,17 @@ func (n *Table) Restore() string { } return result } + +type EmbeddedContent struct { + BaseBlock + + ResourceName string +} + +func (*EmbeddedContent) Type() NodeType { + return EmbeddedContentNode +} + +func (n *EmbeddedContent) Restore() string { + return fmt.Sprintf("![[%s]]", n.ResourceName) +} diff --git a/plugin/gomark/parser/embedded_content.go b/plugin/gomark/parser/embedded_content.go new file mode 100644 index 00000000..2e64c349 --- /dev/null +++ b/plugin/gomark/parser/embedded_content.go @@ -0,0 +1,51 @@ +package parser + +import ( + "errors" + + "github.com/usememos/memos/plugin/gomark/ast" + "github.com/usememos/memos/plugin/gomark/parser/tokenizer" +) + +type EmbeddedContentParser struct{} + +func NewEmbeddedContentParser() *EmbeddedContentParser { + return &EmbeddedContentParser{} +} + +func (*EmbeddedContentParser) Match(tokens []*tokenizer.Token) (int, bool) { + lines := tokenizer.Split(tokens, tokenizer.Newline) + if len(lines) < 1 { + return 0, false + } + firstLine := lines[0] + if len(firstLine) < 5 { + return 0, false + } + if firstLine[0].Type != tokenizer.ExclamationMark || firstLine[1].Type != tokenizer.LeftSquareBracket || firstLine[2].Type != tokenizer.LeftSquareBracket { + return 0, false + } + matched := false + for index, token := range firstLine[:len(firstLine)-1] { + if token.Type == tokenizer.RightSquareBracket && firstLine[index+1].Type == tokenizer.RightSquareBracket && index+1 == len(firstLine)-1 { + matched = true + break + } + } + if !matched { + return 0, false + } + + return len(firstLine), true +} + +func (p *EmbeddedContentParser) Parse(tokens []*tokenizer.Token) (ast.Node, error) { + size, ok := p.Match(tokens) + if size == 0 || !ok { + return nil, errors.New("not matched") + } + + return &ast.EmbeddedContent{ + ResourceName: tokenizer.Stringify(tokens[3 : size-2]), + }, nil +} diff --git a/plugin/gomark/parser/embedded_content_test.go b/plugin/gomark/parser/embedded_content_test.go new file mode 100644 index 00000000..e6111b40 --- /dev/null +++ b/plugin/gomark/parser/embedded_content_test.go @@ -0,0 +1,51 @@ +package parser + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/usememos/memos/plugin/gomark/ast" + "github.com/usememos/memos/plugin/gomark/parser/tokenizer" + "github.com/usememos/memos/plugin/gomark/restore" +) + +func TestEmbeddedContentParser(t *testing.T) { + tests := []struct { + text string + embeddedContent ast.Node + }{ + { + text: "![[Hello world]", + embeddedContent: nil, + }, + { + text: "![[Hello world]]", + embeddedContent: &ast.EmbeddedContent{ + ResourceName: "Hello world", + }, + }, + { + text: "![[memos/1]]", + embeddedContent: &ast.EmbeddedContent{ + ResourceName: "memos/1", + }, + }, + { + text: "![[resources/101]] \n123", + embeddedContent: nil, + }, + { + text: "![[resources/101]]\n123", + embeddedContent: &ast.EmbeddedContent{ + ResourceName: "resources/101", + }, + }, + } + + for _, test := range tests { + tokens := tokenizer.Tokenize(test.text) + node, _ := NewEmbeddedContentParser().Parse(tokens) + require.Equal(t, restore.Restore([]ast.Node{test.embeddedContent}), restore.Restore([]ast.Node{node})) + } +} diff --git a/plugin/gomark/parser/parser.go b/plugin/gomark/parser/parser.go index 37f1be45..61000036 100644 --- a/plugin/gomark/parser/parser.go +++ b/plugin/gomark/parser/parser.go @@ -39,6 +39,7 @@ var defaultBlockParsers = []BlockParser{ NewUnorderedListParser(), NewOrderedListParser(), NewMathBlockParser(), + NewEmbeddedContentParser(), NewParagraphParser(), NewLineBreakParser(), } diff --git a/plugin/gomark/parser/parser_test.go b/plugin/gomark/parser/parser_test.go index 817592d2..aa3f4072 100644 --- a/plugin/gomark/parser/parser_test.go +++ b/plugin/gomark/parser/parser_test.go @@ -218,6 +218,22 @@ func TestParser(t *testing.T) { }, }, }, + { + text: "Hello\n![[memos/101]]", + nodes: []ast.Node{ + &ast.Paragraph{ + Children: []ast.Node{ + &ast.Text{ + Content: "Hello", + }, + }, + }, + &ast.LineBreak{}, + &ast.EmbeddedContent{ + ResourceName: "memos/101", + }, + }, + }, } for _, test := range tests { diff --git a/plugin/gomark/parser/table.go b/plugin/gomark/parser/table.go index bb92c1ef..59f36bd0 100644 --- a/plugin/gomark/parser/table.go +++ b/plugin/gomark/parser/table.go @@ -39,8 +39,10 @@ func (*TableParser) Match(tokens []*tokenizer.Token) (int, bool) { rowTokens := []*tokenizer.Token{} for index, token := range tokens[len(headerTokens)+len(delimiterTokens)+2:] { temp := len(headerTokens) + len(delimiterTokens) + 2 + index - if token.Type == tokenizer.Newline && temp != len(tokens)-1 && tokens[temp+1].Type != tokenizer.Pipe { - break + if token.Type == tokenizer.Newline { + if (temp == len(tokens)-1) || (temp+1 == len(tokens)-1 && tokens[temp+1].Type == tokenizer.Newline) { + break + } } rowTokens = append(rowTokens, token) } @@ -65,7 +67,18 @@ func (*TableParser) Match(tokens []*tokenizer.Token) (int, bool) { if delimiterCells != headerCells || !ok { return 0, false } - for _, t := range tokenizer.Split(delimiterTokens, tokenizer.Pipe) { + + for index, t := range tokenizer.Split(delimiterTokens, tokenizer.Pipe) { + if index == 0 || index == headerCells { + if len(t) != 0 { + return 0, false + } + continue + } + if len(t) < 5 { + return 0, false + } + delimiterTokens := t[1 : len(t)-1] if len(delimiterTokens) < 3 { return 0, false @@ -112,15 +125,16 @@ func (p *TableParser) Parse(tokens []*tokenizer.Token) (ast.Node, error) { delimiter := make([]string, 0) rows := make([][]string, 0) - for _, t := range tokenizer.Split(headerTokens, tokenizer.Pipe) { + cols := len(tokenizer.Split(headerTokens, tokenizer.Pipe)) - 2 + for _, t := range tokenizer.Split(headerTokens, tokenizer.Pipe)[1 : cols+1] { header = append(header, tokenizer.Stringify(t[1:len(t)-1])) } - for _, t := range tokenizer.Split(dilimiterTokens, tokenizer.Pipe) { + for _, t := range tokenizer.Split(dilimiterTokens, tokenizer.Pipe)[1 : cols+1] { delimiter = append(delimiter, tokenizer.Stringify(t[1:len(t)-1])) } for _, row := range rowTokens { cells := make([]string, 0) - for _, t := range tokenizer.Split(row, tokenizer.Pipe) { + for _, t := range tokenizer.Split(row, tokenizer.Pipe)[1 : cols+1] { cells = append(cells, tokenizer.Stringify(t[1:len(t)-1])) } rows = append(rows, cells) @@ -145,10 +159,13 @@ func matchTableCellTokens(tokens []*tokenizer.Token) (int, bool) { } } cells := tokenizer.Split(tokens, tokenizer.Pipe) - if len(cells) != pipes-1 { + if len(cells) != pipes+1 { return 0, false } - for _, cellTokens := range cells { + if len(cells[0]) != 0 || len(cells[len(cells)-1]) != 0 { + return 0, false + } + for _, cellTokens := range cells[1 : len(cells)-1] { if len(cellTokens) == 0 { return 0, false } @@ -160,5 +177,5 @@ func matchTableCellTokens(tokens []*tokenizer.Token) (int, bool) { } } - return len(cells), true + return len(cells) - 1, true } diff --git a/plugin/gomark/parser/tokenizer/tokenizer.go b/plugin/gomark/parser/tokenizer/tokenizer.go index e4651820..98d10115 100644 --- a/plugin/gomark/parser/tokenizer/tokenizer.go +++ b/plugin/gomark/parser/tokenizer/tokenizer.go @@ -132,20 +132,20 @@ func Stringify(tokens []*Token) string { } func Split(tokens []*Token, delimiter TokenType) [][]*Token { + if len(tokens) == 0 { + return [][]*Token{} + } + result := make([][]*Token, 0) current := make([]*Token, 0) for _, token := range tokens { if token.Type == delimiter { - if len(current) > 0 { - result = append(result, current) - current = make([]*Token, 0) - } + result = append(result, current) + current = make([]*Token, 0) } else { current = append(current, token) } } - if len(current) > 0 { - result = append(result, current) - } + result = append(result, current) return result } diff --git a/plugin/gomark/parser/tokenizer/tokenizer_test.go b/plugin/gomark/parser/tokenizer/tokenizer_test.go index 284dba93..90b2a9d4 100644 --- a/plugin/gomark/parser/tokenizer/tokenizer_test.go +++ b/plugin/gomark/parser/tokenizer/tokenizer_test.go @@ -77,3 +77,144 @@ func TestTokenize(t *testing.T) { require.Equal(t, test.tokens, result) } } + +func TestSplit(t *testing.T) { + tests := []struct { + tokens []*Token + sep TokenType + result [][]*Token + }{ + { + tokens: []*Token{ + { + Type: Asterisk, + Value: "*", + }, + { + Type: Text, + Value: "Hello", + }, + { + Type: Space, + Value: " ", + }, + { + Type: Text, + Value: "world", + }, + { + Type: ExclamationMark, + Value: "!", + }, + }, + sep: Asterisk, + result: [][]*Token{ + { + { + Type: Text, + Value: "Hello", + }, + { + Type: Space, + Value: " ", + }, + { + Type: Text, + Value: "world", + }, + { + Type: ExclamationMark, + Value: "!", + }, + }, + }, + }, + { + tokens: []*Token{ + { + Type: Asterisk, + Value: "*", + }, + { + Type: Text, + Value: "Hello", + }, + { + Type: Space, + Value: " ", + }, + { + Type: Text, + Value: "world", + }, + { + Type: ExclamationMark, + Value: "!", + }, + }, + sep: Text, + result: [][]*Token{ + { + { + Type: Asterisk, + Value: "*", + }, + }, + { + { + Type: Space, + Value: " ", + }, + }, + { + { + Type: ExclamationMark, + Value: "!", + }, + }, + }, + }, + { + tokens: []*Token{ + { + Type: Text, + Value: "Hello", + }, + { + Type: Space, + Value: " ", + }, + { + Type: Text, + Value: "world", + }, + { + Type: Newline, + Value: "\n", + }, + }, + sep: Newline, + result: [][]*Token{ + { + { + Type: Text, + Value: "Hello", + }, + { + Type: Space, + Value: " ", + }, + { + Type: Text, + Value: "world", + }, + }, + }, + }, + } + + for _, test := range tests { + result := Split(test.tokens, test.sep) + require.Equal(t, test.result, result) + } +} diff --git a/proto/api/v2/markdown_service.proto b/proto/api/v2/markdown_service.proto index c3d0e451..0da1940a 100644 --- a/proto/api/v2/markdown_service.proto +++ b/proto/api/v2/markdown_service.proto @@ -36,21 +36,22 @@ enum NodeType { TASK_LIST = 9; MATH_BLOCK = 10; TABLE = 11; - TEXT = 12; - BOLD = 13; - ITALIC = 14; - BOLD_ITALIC = 15; - CODE = 16; - IMAGE = 17; - LINK = 18; - AUTO_LINK = 19; - TAG = 20; - STRIKETHROUGH = 21; - ESCAPING_CHARACTER = 22; - MATH = 23; - HIGHLIGHT = 24; - SUBSCRIPT = 25; - SUPERSCRIPT = 26; + EMBEDDED_CONTENT = 12; + TEXT = 13; + BOLD = 14; + ITALIC = 15; + BOLD_ITALIC = 16; + CODE = 17; + IMAGE = 18; + LINK = 19; + AUTO_LINK = 20; + TAG = 21; + STRIKETHROUGH = 22; + ESCAPING_CHARACTER = 23; + MATH = 24; + HIGHLIGHT = 25; + SUBSCRIPT = 26; + SUPERSCRIPT = 27; } message Node { @@ -67,21 +68,22 @@ message Node { TaskListNode task_list_node = 10; MathBlockNode math_block_node = 11; TableNode table_node = 12; - TextNode text_node = 13; - BoldNode bold_node = 14; - ItalicNode italic_node = 15; - BoldItalicNode bold_italic_node = 16; - CodeNode code_node = 17; - ImageNode image_node = 18; - LinkNode link_node = 19; - AutoLinkNode auto_link_node = 20; - TagNode tag_node = 21; - StrikethroughNode strikethrough_node = 22; - EscapingCharacterNode escaping_character_node = 23; - MathNode math_node = 24; - HighlightNode highlight_node = 25; - SubscriptNode subscript_node = 26; - SuperscriptNode superscript_node = 27; + EmbeddedContentNode embedded_content_node = 13; + TextNode text_node = 14; + BoldNode bold_node = 15; + ItalicNode italic_node = 16; + BoldItalicNode bold_italic_node = 17; + CodeNode code_node = 18; + ImageNode image_node = 19; + LinkNode link_node = 20; + AutoLinkNode auto_link_node = 21; + TagNode tag_node = 22; + StrikethroughNode strikethrough_node = 23; + EscapingCharacterNode escaping_character_node = 24; + MathNode math_node = 25; + HighlightNode highlight_node = 26; + SubscriptNode subscript_node = 27; + SuperscriptNode superscript_node = 28; } } @@ -142,6 +144,10 @@ message TableNode { repeated Row rows = 3; } +message EmbeddedContentNode { + string resource_name = 1; +} + message TextNode { string content = 1; } diff --git a/proto/gen/api/v2/README.md b/proto/gen/api/v2/README.md index 3225421c..2269b3d7 100644 --- a/proto/gen/api/v2/README.md +++ b/proto/gen/api/v2/README.md @@ -72,6 +72,7 @@ - [BoldNode](#memos-api-v2-BoldNode) - [CodeBlockNode](#memos-api-v2-CodeBlockNode) - [CodeNode](#memos-api-v2-CodeNode) + - [EmbeddedContentNode](#memos-api-v2-EmbeddedContentNode) - [EscapingCharacterNode](#memos-api-v2-EscapingCharacterNode) - [HeadingNode](#memos-api-v2-HeadingNode) - [HighlightNode](#memos-api-v2-HighlightNode) @@ -1058,6 +1059,21 @@ + + +### EmbeddedContentNode + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| resource_name | [string](#string) | | | + + + + + + ### EscapingCharacterNode @@ -1227,6 +1243,7 @@ | task_list_node | [TaskListNode](#memos-api-v2-TaskListNode) | | | | math_block_node | [MathBlockNode](#memos-api-v2-MathBlockNode) | | | | table_node | [TableNode](#memos-api-v2-TableNode) | | | +| embedded_content_node | [EmbeddedContentNode](#memos-api-v2-EmbeddedContentNode) | | | | text_node | [TextNode](#memos-api-v2-TextNode) | | | | bold_node | [BoldNode](#memos-api-v2-BoldNode) | | | | italic_node | [ItalicNode](#memos-api-v2-ItalicNode) | | | @@ -1473,21 +1490,22 @@ | TASK_LIST | 9 | | | MATH_BLOCK | 10 | | | TABLE | 11 | | -| TEXT | 12 | | -| BOLD | 13 | | -| ITALIC | 14 | | -| BOLD_ITALIC | 15 | | -| CODE | 16 | | -| IMAGE | 17 | | -| LINK | 18 | | -| AUTO_LINK | 19 | | -| TAG | 20 | | -| STRIKETHROUGH | 21 | | -| ESCAPING_CHARACTER | 22 | | -| MATH | 23 | | -| HIGHLIGHT | 24 | | -| SUBSCRIPT | 25 | | -| SUPERSCRIPT | 26 | | +| EMBEDDED_CONTENT | 12 | | +| TEXT | 13 | | +| BOLD | 14 | | +| ITALIC | 15 | | +| BOLD_ITALIC | 16 | | +| CODE | 17 | | +| IMAGE | 18 | | +| LINK | 19 | | +| AUTO_LINK | 20 | | +| TAG | 21 | | +| STRIKETHROUGH | 22 | | +| ESCAPING_CHARACTER | 23 | | +| MATH | 24 | | +| HIGHLIGHT | 25 | | +| SUBSCRIPT | 26 | | +| SUPERSCRIPT | 27 | | diff --git a/proto/gen/api/v2/markdown_service.pb.go b/proto/gen/api/v2/markdown_service.pb.go index d70e1295..d3b1a90c 100644 --- a/proto/gen/api/v2/markdown_service.pb.go +++ b/proto/gen/api/v2/markdown_service.pb.go @@ -36,21 +36,22 @@ const ( NodeType_TASK_LIST NodeType = 9 NodeType_MATH_BLOCK NodeType = 10 NodeType_TABLE NodeType = 11 - NodeType_TEXT NodeType = 12 - NodeType_BOLD NodeType = 13 - NodeType_ITALIC NodeType = 14 - NodeType_BOLD_ITALIC NodeType = 15 - NodeType_CODE NodeType = 16 - NodeType_IMAGE NodeType = 17 - NodeType_LINK NodeType = 18 - NodeType_AUTO_LINK NodeType = 19 - NodeType_TAG NodeType = 20 - NodeType_STRIKETHROUGH NodeType = 21 - NodeType_ESCAPING_CHARACTER NodeType = 22 - NodeType_MATH NodeType = 23 - NodeType_HIGHLIGHT NodeType = 24 - NodeType_SUBSCRIPT NodeType = 25 - NodeType_SUPERSCRIPT NodeType = 26 + NodeType_EMBEDDED_CONTENT NodeType = 12 + NodeType_TEXT NodeType = 13 + NodeType_BOLD NodeType = 14 + NodeType_ITALIC NodeType = 15 + NodeType_BOLD_ITALIC NodeType = 16 + NodeType_CODE NodeType = 17 + NodeType_IMAGE NodeType = 18 + NodeType_LINK NodeType = 19 + NodeType_AUTO_LINK NodeType = 20 + NodeType_TAG NodeType = 21 + NodeType_STRIKETHROUGH NodeType = 22 + NodeType_ESCAPING_CHARACTER NodeType = 23 + NodeType_MATH NodeType = 24 + NodeType_HIGHLIGHT NodeType = 25 + NodeType_SUBSCRIPT NodeType = 26 + NodeType_SUPERSCRIPT NodeType = 27 ) // Enum value maps for NodeType. @@ -68,21 +69,22 @@ var ( 9: "TASK_LIST", 10: "MATH_BLOCK", 11: "TABLE", - 12: "TEXT", - 13: "BOLD", - 14: "ITALIC", - 15: "BOLD_ITALIC", - 16: "CODE", - 17: "IMAGE", - 18: "LINK", - 19: "AUTO_LINK", - 20: "TAG", - 21: "STRIKETHROUGH", - 22: "ESCAPING_CHARACTER", - 23: "MATH", - 24: "HIGHLIGHT", - 25: "SUBSCRIPT", - 26: "SUPERSCRIPT", + 12: "EMBEDDED_CONTENT", + 13: "TEXT", + 14: "BOLD", + 15: "ITALIC", + 16: "BOLD_ITALIC", + 17: "CODE", + 18: "IMAGE", + 19: "LINK", + 20: "AUTO_LINK", + 21: "TAG", + 22: "STRIKETHROUGH", + 23: "ESCAPING_CHARACTER", + 24: "MATH", + 25: "HIGHLIGHT", + 26: "SUBSCRIPT", + 27: "SUPERSCRIPT", } NodeType_value = map[string]int32{ "NODE_UNSPECIFIED": 0, @@ -97,21 +99,22 @@ var ( "TASK_LIST": 9, "MATH_BLOCK": 10, "TABLE": 11, - "TEXT": 12, - "BOLD": 13, - "ITALIC": 14, - "BOLD_ITALIC": 15, - "CODE": 16, - "IMAGE": 17, - "LINK": 18, - "AUTO_LINK": 19, - "TAG": 20, - "STRIKETHROUGH": 21, - "ESCAPING_CHARACTER": 22, - "MATH": 23, - "HIGHLIGHT": 24, - "SUBSCRIPT": 25, - "SUPERSCRIPT": 26, + "EMBEDDED_CONTENT": 12, + "TEXT": 13, + "BOLD": 14, + "ITALIC": 15, + "BOLD_ITALIC": 16, + "CODE": 17, + "IMAGE": 18, + "LINK": 19, + "AUTO_LINK": 20, + "TAG": 21, + "STRIKETHROUGH": 22, + "ESCAPING_CHARACTER": 23, + "MATH": 24, + "HIGHLIGHT": 25, + "SUBSCRIPT": 26, + "SUPERSCRIPT": 27, } ) @@ -255,6 +258,7 @@ type Node struct { // *Node_TaskListNode // *Node_MathBlockNode // *Node_TableNode + // *Node_EmbeddedContentNode // *Node_TextNode // *Node_BoldNode // *Node_ItalicNode @@ -396,6 +400,13 @@ func (x *Node) GetTableNode() *TableNode { return nil } +func (x *Node) GetEmbeddedContentNode() *EmbeddedContentNode { + if x, ok := x.GetNode().(*Node_EmbeddedContentNode); ok { + return x.EmbeddedContentNode + } + return nil +} + func (x *Node) GetTextNode() *TextNode { if x, ok := x.GetNode().(*Node_TextNode); ok { return x.TextNode @@ -549,64 +560,68 @@ type Node_TableNode struct { TableNode *TableNode `protobuf:"bytes,12,opt,name=table_node,json=tableNode,proto3,oneof"` } +type Node_EmbeddedContentNode struct { + EmbeddedContentNode *EmbeddedContentNode `protobuf:"bytes,13,opt,name=embedded_content_node,json=embeddedContentNode,proto3,oneof"` +} + type Node_TextNode struct { - TextNode *TextNode `protobuf:"bytes,13,opt,name=text_node,json=textNode,proto3,oneof"` + TextNode *TextNode `protobuf:"bytes,14,opt,name=text_node,json=textNode,proto3,oneof"` } type Node_BoldNode struct { - BoldNode *BoldNode `protobuf:"bytes,14,opt,name=bold_node,json=boldNode,proto3,oneof"` + BoldNode *BoldNode `protobuf:"bytes,15,opt,name=bold_node,json=boldNode,proto3,oneof"` } type Node_ItalicNode struct { - ItalicNode *ItalicNode `protobuf:"bytes,15,opt,name=italic_node,json=italicNode,proto3,oneof"` + ItalicNode *ItalicNode `protobuf:"bytes,16,opt,name=italic_node,json=italicNode,proto3,oneof"` } type Node_BoldItalicNode struct { - BoldItalicNode *BoldItalicNode `protobuf:"bytes,16,opt,name=bold_italic_node,json=boldItalicNode,proto3,oneof"` + BoldItalicNode *BoldItalicNode `protobuf:"bytes,17,opt,name=bold_italic_node,json=boldItalicNode,proto3,oneof"` } type Node_CodeNode struct { - CodeNode *CodeNode `protobuf:"bytes,17,opt,name=code_node,json=codeNode,proto3,oneof"` + CodeNode *CodeNode `protobuf:"bytes,18,opt,name=code_node,json=codeNode,proto3,oneof"` } type Node_ImageNode struct { - ImageNode *ImageNode `protobuf:"bytes,18,opt,name=image_node,json=imageNode,proto3,oneof"` + ImageNode *ImageNode `protobuf:"bytes,19,opt,name=image_node,json=imageNode,proto3,oneof"` } type Node_LinkNode struct { - LinkNode *LinkNode `protobuf:"bytes,19,opt,name=link_node,json=linkNode,proto3,oneof"` + LinkNode *LinkNode `protobuf:"bytes,20,opt,name=link_node,json=linkNode,proto3,oneof"` } type Node_AutoLinkNode struct { - AutoLinkNode *AutoLinkNode `protobuf:"bytes,20,opt,name=auto_link_node,json=autoLinkNode,proto3,oneof"` + AutoLinkNode *AutoLinkNode `protobuf:"bytes,21,opt,name=auto_link_node,json=autoLinkNode,proto3,oneof"` } type Node_TagNode struct { - TagNode *TagNode `protobuf:"bytes,21,opt,name=tag_node,json=tagNode,proto3,oneof"` + TagNode *TagNode `protobuf:"bytes,22,opt,name=tag_node,json=tagNode,proto3,oneof"` } type Node_StrikethroughNode struct { - StrikethroughNode *StrikethroughNode `protobuf:"bytes,22,opt,name=strikethrough_node,json=strikethroughNode,proto3,oneof"` + StrikethroughNode *StrikethroughNode `protobuf:"bytes,23,opt,name=strikethrough_node,json=strikethroughNode,proto3,oneof"` } type Node_EscapingCharacterNode struct { - EscapingCharacterNode *EscapingCharacterNode `protobuf:"bytes,23,opt,name=escaping_character_node,json=escapingCharacterNode,proto3,oneof"` + EscapingCharacterNode *EscapingCharacterNode `protobuf:"bytes,24,opt,name=escaping_character_node,json=escapingCharacterNode,proto3,oneof"` } type Node_MathNode struct { - MathNode *MathNode `protobuf:"bytes,24,opt,name=math_node,json=mathNode,proto3,oneof"` + MathNode *MathNode `protobuf:"bytes,25,opt,name=math_node,json=mathNode,proto3,oneof"` } type Node_HighlightNode struct { - HighlightNode *HighlightNode `protobuf:"bytes,25,opt,name=highlight_node,json=highlightNode,proto3,oneof"` + HighlightNode *HighlightNode `protobuf:"bytes,26,opt,name=highlight_node,json=highlightNode,proto3,oneof"` } type Node_SubscriptNode struct { - SubscriptNode *SubscriptNode `protobuf:"bytes,26,opt,name=subscript_node,json=subscriptNode,proto3,oneof"` + SubscriptNode *SubscriptNode `protobuf:"bytes,27,opt,name=subscript_node,json=subscriptNode,proto3,oneof"` } type Node_SuperscriptNode struct { - SuperscriptNode *SuperscriptNode `protobuf:"bytes,27,opt,name=superscript_node,json=superscriptNode,proto3,oneof"` + SuperscriptNode *SuperscriptNode `protobuf:"bytes,28,opt,name=superscript_node,json=superscriptNode,proto3,oneof"` } func (*Node_LineBreakNode) isNode_Node() {} @@ -631,6 +646,8 @@ func (*Node_MathBlockNode) isNode_Node() {} func (*Node_TableNode) isNode_Node() {} +func (*Node_EmbeddedContentNode) isNode_Node() {} + func (*Node_TextNode) isNode_Node() {} func (*Node_BoldNode) isNode_Node() {} @@ -1257,6 +1274,53 @@ func (x *TableNode) GetRows() []*TableNode_Row { return nil } +type EmbeddedContentNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"` +} + +func (x *EmbeddedContentNode) Reset() { + *x = EmbeddedContentNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EmbeddedContentNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EmbeddedContentNode) ProtoMessage() {} + +func (x *EmbeddedContentNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EmbeddedContentNode.ProtoReflect.Descriptor instead. +func (*EmbeddedContentNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{14} +} + +func (x *EmbeddedContentNode) GetResourceName() string { + if x != nil { + return x.ResourceName + } + return "" +} + type TextNode struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1268,7 +1332,7 @@ type TextNode struct { func (x *TextNode) Reset() { *x = TextNode{} if protoimpl.UnsafeEnabled { - mi := &file_api_v2_markdown_service_proto_msgTypes[14] + mi := &file_api_v2_markdown_service_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1281,7 +1345,7 @@ func (x *TextNode) String() string { func (*TextNode) ProtoMessage() {} func (x *TextNode) ProtoReflect() protoreflect.Message { - mi := &file_api_v2_markdown_service_proto_msgTypes[14] + mi := &file_api_v2_markdown_service_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1294,7 +1358,7 @@ func (x *TextNode) ProtoReflect() protoreflect.Message { // Deprecated: Use TextNode.ProtoReflect.Descriptor instead. func (*TextNode) Descriptor() ([]byte, []int) { - return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{14} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{15} } func (x *TextNode) GetContent() string { @@ -1316,7 +1380,7 @@ type BoldNode struct { func (x *BoldNode) Reset() { *x = BoldNode{} if protoimpl.UnsafeEnabled { - mi := &file_api_v2_markdown_service_proto_msgTypes[15] + mi := &file_api_v2_markdown_service_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1329,7 +1393,7 @@ func (x *BoldNode) String() string { func (*BoldNode) ProtoMessage() {} func (x *BoldNode) ProtoReflect() protoreflect.Message { - mi := &file_api_v2_markdown_service_proto_msgTypes[15] + mi := &file_api_v2_markdown_service_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1342,7 +1406,7 @@ func (x *BoldNode) ProtoReflect() protoreflect.Message { // Deprecated: Use BoldNode.ProtoReflect.Descriptor instead. func (*BoldNode) Descriptor() ([]byte, []int) { - return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{15} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{16} } func (x *BoldNode) GetSymbol() string { @@ -1371,7 +1435,7 @@ type ItalicNode struct { func (x *ItalicNode) Reset() { *x = ItalicNode{} if protoimpl.UnsafeEnabled { - mi := &file_api_v2_markdown_service_proto_msgTypes[16] + mi := &file_api_v2_markdown_service_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1384,7 +1448,7 @@ func (x *ItalicNode) String() string { func (*ItalicNode) ProtoMessage() {} func (x *ItalicNode) ProtoReflect() protoreflect.Message { - mi := &file_api_v2_markdown_service_proto_msgTypes[16] + mi := &file_api_v2_markdown_service_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1397,7 +1461,7 @@ func (x *ItalicNode) ProtoReflect() protoreflect.Message { // Deprecated: Use ItalicNode.ProtoReflect.Descriptor instead. func (*ItalicNode) Descriptor() ([]byte, []int) { - return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{16} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{17} } func (x *ItalicNode) GetSymbol() string { @@ -1426,7 +1490,7 @@ type BoldItalicNode struct { func (x *BoldItalicNode) Reset() { *x = BoldItalicNode{} if protoimpl.UnsafeEnabled { - mi := &file_api_v2_markdown_service_proto_msgTypes[17] + mi := &file_api_v2_markdown_service_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1439,7 +1503,7 @@ func (x *BoldItalicNode) String() string { func (*BoldItalicNode) ProtoMessage() {} func (x *BoldItalicNode) ProtoReflect() protoreflect.Message { - mi := &file_api_v2_markdown_service_proto_msgTypes[17] + mi := &file_api_v2_markdown_service_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1452,7 +1516,7 @@ func (x *BoldItalicNode) ProtoReflect() protoreflect.Message { // Deprecated: Use BoldItalicNode.ProtoReflect.Descriptor instead. func (*BoldItalicNode) Descriptor() ([]byte, []int) { - return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{17} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{18} } func (x *BoldItalicNode) GetSymbol() string { @@ -1480,7 +1544,7 @@ type CodeNode struct { func (x *CodeNode) Reset() { *x = CodeNode{} if protoimpl.UnsafeEnabled { - mi := &file_api_v2_markdown_service_proto_msgTypes[18] + mi := &file_api_v2_markdown_service_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1493,7 +1557,7 @@ func (x *CodeNode) String() string { func (*CodeNode) ProtoMessage() {} func (x *CodeNode) ProtoReflect() protoreflect.Message { - mi := &file_api_v2_markdown_service_proto_msgTypes[18] + mi := &file_api_v2_markdown_service_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1506,7 +1570,7 @@ func (x *CodeNode) ProtoReflect() protoreflect.Message { // Deprecated: Use CodeNode.ProtoReflect.Descriptor instead. func (*CodeNode) Descriptor() ([]byte, []int) { - return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{18} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{19} } func (x *CodeNode) GetContent() string { @@ -1528,7 +1592,7 @@ type ImageNode struct { func (x *ImageNode) Reset() { *x = ImageNode{} if protoimpl.UnsafeEnabled { - mi := &file_api_v2_markdown_service_proto_msgTypes[19] + mi := &file_api_v2_markdown_service_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1541,7 +1605,7 @@ func (x *ImageNode) String() string { func (*ImageNode) ProtoMessage() {} func (x *ImageNode) ProtoReflect() protoreflect.Message { - mi := &file_api_v2_markdown_service_proto_msgTypes[19] + mi := &file_api_v2_markdown_service_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1554,7 +1618,7 @@ func (x *ImageNode) ProtoReflect() protoreflect.Message { // Deprecated: Use ImageNode.ProtoReflect.Descriptor instead. func (*ImageNode) Descriptor() ([]byte, []int) { - return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{19} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{20} } func (x *ImageNode) GetAltText() string { @@ -1583,7 +1647,7 @@ type LinkNode struct { func (x *LinkNode) Reset() { *x = LinkNode{} if protoimpl.UnsafeEnabled { - mi := &file_api_v2_markdown_service_proto_msgTypes[20] + mi := &file_api_v2_markdown_service_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1596,7 +1660,7 @@ func (x *LinkNode) String() string { func (*LinkNode) ProtoMessage() {} func (x *LinkNode) ProtoReflect() protoreflect.Message { - mi := &file_api_v2_markdown_service_proto_msgTypes[20] + mi := &file_api_v2_markdown_service_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1609,7 +1673,7 @@ func (x *LinkNode) ProtoReflect() protoreflect.Message { // Deprecated: Use LinkNode.ProtoReflect.Descriptor instead. func (*LinkNode) Descriptor() ([]byte, []int) { - return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{20} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{21} } func (x *LinkNode) GetText() string { @@ -1638,7 +1702,7 @@ type AutoLinkNode struct { func (x *AutoLinkNode) Reset() { *x = AutoLinkNode{} if protoimpl.UnsafeEnabled { - mi := &file_api_v2_markdown_service_proto_msgTypes[21] + mi := &file_api_v2_markdown_service_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1651,7 +1715,7 @@ func (x *AutoLinkNode) String() string { func (*AutoLinkNode) ProtoMessage() {} func (x *AutoLinkNode) ProtoReflect() protoreflect.Message { - mi := &file_api_v2_markdown_service_proto_msgTypes[21] + mi := &file_api_v2_markdown_service_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1664,7 +1728,7 @@ func (x *AutoLinkNode) ProtoReflect() protoreflect.Message { // Deprecated: Use AutoLinkNode.ProtoReflect.Descriptor instead. func (*AutoLinkNode) Descriptor() ([]byte, []int) { - return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{21} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{22} } func (x *AutoLinkNode) GetUrl() string { @@ -1692,7 +1756,7 @@ type TagNode struct { func (x *TagNode) Reset() { *x = TagNode{} if protoimpl.UnsafeEnabled { - mi := &file_api_v2_markdown_service_proto_msgTypes[22] + mi := &file_api_v2_markdown_service_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1705,7 +1769,7 @@ func (x *TagNode) String() string { func (*TagNode) ProtoMessage() {} func (x *TagNode) ProtoReflect() protoreflect.Message { - mi := &file_api_v2_markdown_service_proto_msgTypes[22] + mi := &file_api_v2_markdown_service_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1718,7 +1782,7 @@ func (x *TagNode) ProtoReflect() protoreflect.Message { // Deprecated: Use TagNode.ProtoReflect.Descriptor instead. func (*TagNode) Descriptor() ([]byte, []int) { - return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{22} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{23} } func (x *TagNode) GetContent() string { @@ -1739,7 +1803,7 @@ type StrikethroughNode struct { func (x *StrikethroughNode) Reset() { *x = StrikethroughNode{} if protoimpl.UnsafeEnabled { - mi := &file_api_v2_markdown_service_proto_msgTypes[23] + mi := &file_api_v2_markdown_service_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1752,7 +1816,7 @@ func (x *StrikethroughNode) String() string { func (*StrikethroughNode) ProtoMessage() {} func (x *StrikethroughNode) ProtoReflect() protoreflect.Message { - mi := &file_api_v2_markdown_service_proto_msgTypes[23] + mi := &file_api_v2_markdown_service_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1765,7 +1829,7 @@ func (x *StrikethroughNode) ProtoReflect() protoreflect.Message { // Deprecated: Use StrikethroughNode.ProtoReflect.Descriptor instead. func (*StrikethroughNode) Descriptor() ([]byte, []int) { - return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{23} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{24} } func (x *StrikethroughNode) GetContent() string { @@ -1786,7 +1850,7 @@ type EscapingCharacterNode struct { func (x *EscapingCharacterNode) Reset() { *x = EscapingCharacterNode{} if protoimpl.UnsafeEnabled { - mi := &file_api_v2_markdown_service_proto_msgTypes[24] + mi := &file_api_v2_markdown_service_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1799,7 +1863,7 @@ func (x *EscapingCharacterNode) String() string { func (*EscapingCharacterNode) ProtoMessage() {} func (x *EscapingCharacterNode) ProtoReflect() protoreflect.Message { - mi := &file_api_v2_markdown_service_proto_msgTypes[24] + mi := &file_api_v2_markdown_service_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1812,7 +1876,7 @@ func (x *EscapingCharacterNode) ProtoReflect() protoreflect.Message { // Deprecated: Use EscapingCharacterNode.ProtoReflect.Descriptor instead. func (*EscapingCharacterNode) Descriptor() ([]byte, []int) { - return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{24} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{25} } func (x *EscapingCharacterNode) GetSymbol() string { @@ -1833,7 +1897,7 @@ type MathNode struct { func (x *MathNode) Reset() { *x = MathNode{} if protoimpl.UnsafeEnabled { - mi := &file_api_v2_markdown_service_proto_msgTypes[25] + mi := &file_api_v2_markdown_service_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1846,7 +1910,7 @@ func (x *MathNode) String() string { func (*MathNode) ProtoMessage() {} func (x *MathNode) ProtoReflect() protoreflect.Message { - mi := &file_api_v2_markdown_service_proto_msgTypes[25] + mi := &file_api_v2_markdown_service_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1859,7 +1923,7 @@ func (x *MathNode) ProtoReflect() protoreflect.Message { // Deprecated: Use MathNode.ProtoReflect.Descriptor instead. func (*MathNode) Descriptor() ([]byte, []int) { - return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{25} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{26} } func (x *MathNode) GetContent() string { @@ -1880,7 +1944,7 @@ type HighlightNode struct { func (x *HighlightNode) Reset() { *x = HighlightNode{} if protoimpl.UnsafeEnabled { - mi := &file_api_v2_markdown_service_proto_msgTypes[26] + mi := &file_api_v2_markdown_service_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1893,7 +1957,7 @@ func (x *HighlightNode) String() string { func (*HighlightNode) ProtoMessage() {} func (x *HighlightNode) ProtoReflect() protoreflect.Message { - mi := &file_api_v2_markdown_service_proto_msgTypes[26] + mi := &file_api_v2_markdown_service_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1906,7 +1970,7 @@ func (x *HighlightNode) ProtoReflect() protoreflect.Message { // Deprecated: Use HighlightNode.ProtoReflect.Descriptor instead. func (*HighlightNode) Descriptor() ([]byte, []int) { - return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{26} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{27} } func (x *HighlightNode) GetContent() string { @@ -1927,7 +1991,7 @@ type SubscriptNode struct { func (x *SubscriptNode) Reset() { *x = SubscriptNode{} if protoimpl.UnsafeEnabled { - mi := &file_api_v2_markdown_service_proto_msgTypes[27] + mi := &file_api_v2_markdown_service_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1940,7 +2004,7 @@ func (x *SubscriptNode) String() string { func (*SubscriptNode) ProtoMessage() {} func (x *SubscriptNode) ProtoReflect() protoreflect.Message { - mi := &file_api_v2_markdown_service_proto_msgTypes[27] + mi := &file_api_v2_markdown_service_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1953,7 +2017,7 @@ func (x *SubscriptNode) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscriptNode.ProtoReflect.Descriptor instead. func (*SubscriptNode) Descriptor() ([]byte, []int) { - return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{27} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{28} } func (x *SubscriptNode) GetContent() string { @@ -1974,7 +2038,7 @@ type SuperscriptNode struct { func (x *SuperscriptNode) Reset() { *x = SuperscriptNode{} if protoimpl.UnsafeEnabled { - mi := &file_api_v2_markdown_service_proto_msgTypes[28] + mi := &file_api_v2_markdown_service_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1987,7 +2051,7 @@ func (x *SuperscriptNode) String() string { func (*SuperscriptNode) ProtoMessage() {} func (x *SuperscriptNode) ProtoReflect() protoreflect.Message { - mi := &file_api_v2_markdown_service_proto_msgTypes[28] + mi := &file_api_v2_markdown_service_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2000,7 +2064,7 @@ func (x *SuperscriptNode) ProtoReflect() protoreflect.Message { // Deprecated: Use SuperscriptNode.ProtoReflect.Descriptor instead. func (*SuperscriptNode) Descriptor() ([]byte, []int) { - return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{28} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{29} } func (x *SuperscriptNode) GetContent() string { @@ -2021,7 +2085,7 @@ type TableNode_Row struct { func (x *TableNode_Row) Reset() { *x = TableNode_Row{} if protoimpl.UnsafeEnabled { - mi := &file_api_v2_markdown_service_proto_msgTypes[29] + mi := &file_api_v2_markdown_service_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2034,7 +2098,7 @@ func (x *TableNode_Row) String() string { func (*TableNode_Row) ProtoMessage() {} func (x *TableNode_Row) ProtoReflect() protoreflect.Message { - mi := &file_api_v2_markdown_service_proto_msgTypes[29] + mi := &file_api_v2_markdown_service_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2072,7 +2136,7 @@ var file_api_v2_markdown_service_proto_rawDesc = []byte{ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x64, - 0x65, 0x73, 0x22, 0xa7, 0x0e, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x04, 0x74, + 0x65, 0x73, 0x22, 0x80, 0x0f, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x45, 0x0a, 0x0f, 0x6c, 0x69, 0x6e, 0x65, 0x5f, @@ -2125,219 +2189,230 @@ var file_api_v2_markdown_service_proto_rawDesc = []byte{ 0x6f, 0x64, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, - 0x35, 0x0a, 0x09, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x0d, 0x20, 0x01, + 0x57, 0x0a, 0x15, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6d, + 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, + 0x65, 0x48, 0x00, 0x52, 0x13, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x74, 0x65, 0x78, 0x74, + 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, + 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x4e, + 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x08, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, + 0x35, 0x0a, 0x09, 0x62, 0x6f, 0x6c, 0x64, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x08, 0x74, 0x65, - 0x78, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x62, 0x6f, 0x6c, 0x64, 0x5f, 0x6e, - 0x6f, 0x64, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, - 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6f, 0x6c, 0x64, 0x4e, 0x6f, 0x64, - 0x65, 0x48, 0x00, 0x52, 0x08, 0x62, 0x6f, 0x6c, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x3b, 0x0a, - 0x0b, 0x69, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x32, 0x2e, 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0a, - 0x69, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x48, 0x0a, 0x10, 0x62, 0x6f, - 0x6c, 0x64, 0x5f, 0x69, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6f, 0x6c, 0x64, 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, - 0x64, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x62, 0x6f, 0x6c, 0x64, 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, - 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x6f, 0x64, - 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x48, - 0x00, 0x52, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x49, - 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, - 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6e, 0x6f, - 0x64, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, - 0x48, 0x00, 0x52, 0x08, 0x6c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x42, 0x0a, 0x0e, - 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x14, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, - 0x48, 0x00, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, - 0x12, 0x32, 0x0a, 0x08, 0x74, 0x61, 0x67, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x15, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x32, 0x2e, 0x54, 0x61, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x07, 0x74, 0x61, 0x67, - 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x50, 0x0a, 0x12, 0x73, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x74, 0x68, - 0x72, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, - 0x53, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x4e, 0x6f, 0x64, - 0x65, 0x48, 0x00, 0x52, 0x11, 0x73, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x74, 0x68, 0x72, 0x6f, 0x75, - 0x67, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x5d, 0x0a, 0x17, 0x65, 0x73, 0x63, 0x61, 0x70, 0x69, - 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x64, - 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x73, 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x43, - 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x15, - 0x65, 0x73, 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, - 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x6e, 0x6f, - 0x64, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x4e, 0x6f, 0x64, 0x65, - 0x48, 0x00, 0x52, 0x08, 0x6d, 0x61, 0x74, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x44, 0x0a, 0x0e, - 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x19, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x4e, 0x6f, 0x64, - 0x65, 0x48, 0x00, 0x52, 0x0d, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x4e, 0x6f, - 0x64, 0x65, 0x12, 0x44, 0x0a, 0x0e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, - 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x65, 0x6d, - 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x4a, 0x0a, 0x10, 0x73, 0x75, 0x70, 0x65, - 0x72, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x1b, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x32, 0x2e, 0x53, 0x75, 0x70, 0x65, 0x72, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4e, 0x6f, 0x64, - 0x65, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x75, 0x70, 0x65, 0x72, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x4e, 0x6f, 0x64, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x0f, 0x0a, 0x0d, - 0x4c, 0x69, 0x6e, 0x65, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x3f, 0x0a, - 0x0d, 0x50, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2e, - 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, - 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x45, - 0x0a, 0x0d, 0x43, 0x6f, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x53, 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, - 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, - 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, - 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, - 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x2c, 0x0a, 0x12, 0x48, 0x6f, - 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x22, 0x40, 0x0a, 0x0e, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, - 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, - 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, - 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x71, 0x0a, 0x0f, 0x4f, 0x72, - 0x64, 0x65, 0x72, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, - 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, - 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x73, 0x0a, - 0x11, 0x55, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, - 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, - 0x64, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, - 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, - 0x65, 0x6e, 0x22, 0x8a, 0x01, 0x0a, 0x0c, 0x54, 0x61, 0x73, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x4e, - 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x69, - 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x64, - 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, - 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, - 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, - 0x29, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x68, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x6f, 0x64, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x8f, 0x01, 0x0a, 0x09, 0x54, - 0x61, 0x62, 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, 0x09, 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, 0x03, 0x52, 0x6f, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x24, 0x0a, 0x08, - 0x54, 0x65, 0x78, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x22, 0x52, 0x0a, 0x08, 0x42, 0x6f, 0x6c, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, - 0x65, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, + 0x32, 0x2e, 0x42, 0x6f, 0x6c, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x08, 0x62, 0x6f, + 0x6c, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x69, 0x74, 0x61, 0x6c, 0x69, 0x63, + 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x65, + 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x74, 0x61, 0x6c, 0x69, + 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x69, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, + 0x6f, 0x64, 0x65, 0x12, 0x48, 0x0a, 0x10, 0x62, 0x6f, 0x6c, 0x64, 0x5f, 0x69, 0x74, 0x61, 0x6c, + 0x69, 0x63, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6f, 0x6c, + 0x64, 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x62, + 0x6f, 0x6c, 0x64, 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, + 0x09, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, + 0x43, 0x6f, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6f, 0x64, 0x65, + 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x6e, 0x6f, + 0x64, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, + 0x65, 0x48, 0x00, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, + 0x0a, 0x09, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, + 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x08, 0x6c, 0x69, 0x6e, + 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x42, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x6c, 0x69, + 0x6e, 0x6b, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x75, 0x74, + 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x61, 0x75, 0x74, + 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x74, 0x61, 0x67, + 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x65, + 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x61, 0x67, 0x4e, 0x6f, + 0x64, 0x65, 0x48, 0x00, 0x52, 0x07, 0x74, 0x61, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x50, 0x0a, + 0x12, 0x73, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x6e, + 0x6f, 0x64, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, + 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x74, + 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x11, 0x73, 0x74, + 0x72, 0x69, 0x6b, 0x65, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x12, + 0x5d, 0x0a, 0x17, 0x65, 0x73, 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x72, + 0x61, 0x63, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x23, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, + 0x45, 0x73, 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, + 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x15, 0x65, 0x73, 0x63, 0x61, 0x70, 0x69, 0x6e, + 0x67, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, + 0x0a, 0x09, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, + 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x08, 0x6d, 0x61, 0x74, + 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x44, 0x0a, 0x0e, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, + 0x68, 0x74, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x69, 0x67, + 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x68, 0x69, + 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x44, 0x0a, 0x0e, 0x73, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x1b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x32, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4e, 0x6f, 0x64, 0x65, + 0x48, 0x00, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4e, 0x6f, 0x64, + 0x65, 0x12, 0x4a, 0x0a, 0x10, 0x73, 0x75, 0x70, 0x65, 0x72, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6d, 0x65, + 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x75, 0x70, 0x65, 0x72, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x75, + 0x70, 0x65, 0x72, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x42, 0x06, 0x0a, + 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x4c, 0x69, 0x6e, 0x65, 0x42, 0x72, 0x65, + 0x61, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x3f, 0x0a, 0x0d, 0x50, 0x61, 0x72, 0x61, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, + 0x72, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, + 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, + 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x45, 0x0a, 0x0d, 0x43, 0x6f, 0x64, 0x65, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, + 0x75, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, + 0x75, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x53, + 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, + 0x76, 0x65, 0x6c, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, + 0x72, 0x65, 0x6e, 0x22, 0x2c, 0x0a, 0x12, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, + 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, + 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, + 0x6c, 0x22, 0x40, 0x0a, 0x0e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x4e, + 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, + 0x72, 0x65, 0x6e, 0x22, 0x71, 0x0a, 0x0f, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x4c, 0x69, + 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, + 0x0a, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, + 0x65, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, - 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x3e, 0x0a, 0x0a, 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, - 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x07, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x42, 0x0a, 0x0e, 0x42, 0x6f, 0x6c, 0x64, 0x49, 0x74, - 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, - 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, - 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x24, 0x0a, 0x08, 0x43, 0x6f, - 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x22, 0x38, 0x0a, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, - 0x08, 0x61, 0x6c, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x6c, 0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x30, 0x0a, 0x08, 0x4c, 0x69, - 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, - 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x40, 0x0a, 0x0c, - 0x41, 0x75, 0x74, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, - 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1e, - 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x72, 0x61, 0x77, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x52, 0x61, 0x77, 0x54, 0x65, 0x78, 0x74, 0x22, 0x23, - 0x0a, 0x07, 0x54, 0x61, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x22, 0x2d, 0x0a, 0x11, 0x53, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x74, 0x68, 0x72, - 0x6f, 0x75, 0x67, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x22, 0x2f, 0x0a, 0x15, 0x45, 0x73, 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x68, - 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x73, 0x0a, 0x11, 0x55, 0x6e, 0x6f, 0x72, 0x64, 0x65, + 0x72, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, - 0x62, 0x6f, 0x6c, 0x22, 0x24, 0x0a, 0x08, 0x4d, 0x61, 0x74, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x12, + 0x62, 0x6f, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x08, 0x63, + 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, + 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x8a, 0x01, 0x0a, 0x0c, + 0x54, 0x61, 0x73, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, + 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, + 0x64, 0x72, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, + 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, + 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x29, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x68, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x22, 0x8f, 0x01, 0x0a, 0x09, 0x54, 0x61, 0x62, 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, 0x09, 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, 0x03, 0x52, 0x6f, 0x77, 0x12, + 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, + 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x3a, 0x0a, 0x13, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, + 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0x24, 0x0a, 0x08, 0x54, 0x65, 0x78, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x52, 0x0a, 0x08, 0x42, 0x6f, 0x6c, 0x64, 0x4e, + 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x2e, 0x0a, 0x08, 0x63, + 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, + 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x3e, 0x0a, 0x0a, 0x49, + 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, + 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, + 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x42, 0x0a, 0x0e, 0x42, + 0x6f, 0x6c, 0x64, 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, + 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, + 0x24, 0x0a, 0x08, 0x43, 0x6f, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x38, 0x0a, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x6f, + 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6c, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x6c, 0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, + 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, + 0x30, 0x0a, 0x08, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, + 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, + 0x6c, 0x22, 0x40, 0x0a, 0x0c, 0x41, 0x75, 0x74, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x75, 0x72, 0x6c, 0x12, 0x1e, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x72, 0x61, 0x77, 0x5f, 0x74, 0x65, + 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x52, 0x61, 0x77, 0x54, + 0x65, 0x78, 0x74, 0x22, 0x23, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x2d, 0x0a, 0x11, 0x53, 0x74, 0x72, 0x69, + 0x6b, 0x65, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x2f, 0x0a, 0x15, 0x45, 0x73, 0x63, 0x61, 0x70, + 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x22, 0x24, 0x0a, 0x08, 0x4d, 0x61, 0x74, 0x68, + 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x29, + 0x0a, 0x0d, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x29, 0x0a, 0x0d, 0x48, 0x69, 0x67, - 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, + 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x29, 0x0a, 0x0d, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x22, 0x29, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, - 0x2b, 0x0a, 0x0f, 0x53, 0x75, 0x70, 0x65, 0x72, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4e, 0x6f, - 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2a, 0x9d, 0x03, 0x0a, - 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4e, 0x4f, 0x44, - 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x42, 0x52, 0x45, 0x41, 0x4b, 0x10, 0x01, 0x12, - 0x0d, 0x0a, 0x09, 0x50, 0x41, 0x52, 0x41, 0x47, 0x52, 0x41, 0x50, 0x48, 0x10, 0x02, 0x12, 0x0e, - 0x0a, 0x0a, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x03, 0x12, 0x0b, - 0x0a, 0x07, 0x48, 0x45, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x48, - 0x4f, 0x52, 0x49, 0x5a, 0x4f, 0x4e, 0x54, 0x41, 0x4c, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x10, 0x05, - 0x12, 0x0e, 0x0a, 0x0a, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x10, 0x06, - 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x45, 0x44, 0x5f, 0x4c, 0x49, 0x53, 0x54, - 0x10, 0x07, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x4e, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x45, 0x44, 0x5f, - 0x4c, 0x49, 0x53, 0x54, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x41, 0x53, 0x4b, 0x5f, 0x4c, - 0x49, 0x53, 0x54, 0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x41, 0x54, 0x48, 0x5f, 0x42, 0x4c, - 0x4f, 0x43, 0x4b, 0x10, 0x0a, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x0b, - 0x12, 0x08, 0x0a, 0x04, 0x54, 0x45, 0x58, 0x54, 0x10, 0x0c, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4f, - 0x4c, 0x44, 0x10, 0x0d, 0x12, 0x0a, 0x0a, 0x06, 0x49, 0x54, 0x41, 0x4c, 0x49, 0x43, 0x10, 0x0e, - 0x12, 0x0f, 0x0a, 0x0b, 0x42, 0x4f, 0x4c, 0x44, 0x5f, 0x49, 0x54, 0x41, 0x4c, 0x49, 0x43, 0x10, - 0x0f, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x10, 0x12, 0x09, 0x0a, 0x05, 0x49, - 0x4d, 0x41, 0x47, 0x45, 0x10, 0x11, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x12, - 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x13, 0x12, - 0x07, 0x0a, 0x03, 0x54, 0x41, 0x47, 0x10, 0x14, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x52, 0x49, - 0x4b, 0x45, 0x54, 0x48, 0x52, 0x4f, 0x55, 0x47, 0x48, 0x10, 0x15, 0x12, 0x16, 0x0a, 0x12, 0x45, - 0x53, 0x43, 0x41, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, - 0x52, 0x10, 0x16, 0x12, 0x08, 0x0a, 0x04, 0x4d, 0x41, 0x54, 0x48, 0x10, 0x17, 0x12, 0x0d, 0x0a, - 0x09, 0x48, 0x49, 0x47, 0x48, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x10, 0x18, 0x12, 0x0d, 0x0a, 0x09, - 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x10, 0x19, 0x12, 0x0f, 0x0a, 0x0b, 0x53, - 0x55, 0x50, 0x45, 0x52, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x10, 0x1a, 0x32, 0x88, 0x01, 0x0a, - 0x0f, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x75, 0x0a, 0x0d, 0x50, 0x61, 0x72, 0x73, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, - 0x6e, 0x12, 0x22, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, - 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, - 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x6d, - 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x42, 0xac, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, - 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x42, 0x14, 0x4d, 0x61, - 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x75, 0x73, 0x65, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, - 0x3b, 0x61, 0x70, 0x69, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x4d, 0x41, 0x58, 0xaa, 0x02, 0x0c, 0x4d, - 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x0c, 0x4d, 0x65, - 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x18, 0x4d, 0x65, 0x6d, - 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x41, - 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x65, 0x6e, 0x74, 0x22, 0x2b, 0x0a, 0x0f, 0x53, 0x75, 0x70, 0x65, 0x72, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x2a, 0xb3, 0x03, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, + 0x0a, 0x10, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x42, 0x52, 0x45, + 0x41, 0x4b, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x41, 0x52, 0x41, 0x47, 0x52, 0x41, 0x50, + 0x48, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x42, 0x4c, 0x4f, 0x43, + 0x4b, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x45, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x04, + 0x12, 0x13, 0x0a, 0x0f, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x4f, 0x4e, 0x54, 0x41, 0x4c, 0x5f, 0x52, + 0x55, 0x4c, 0x45, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x51, 0x55, + 0x4f, 0x54, 0x45, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x45, 0x44, + 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x07, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x4e, 0x4f, 0x52, 0x44, + 0x45, 0x52, 0x45, 0x44, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x54, + 0x41, 0x53, 0x4b, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x41, + 0x54, 0x48, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x0a, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x41, + 0x42, 0x4c, 0x45, 0x10, 0x0b, 0x12, 0x14, 0x0a, 0x10, 0x45, 0x4d, 0x42, 0x45, 0x44, 0x44, 0x45, + 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x10, 0x0c, 0x12, 0x08, 0x0a, 0x04, 0x54, + 0x45, 0x58, 0x54, 0x10, 0x0d, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4f, 0x4c, 0x44, 0x10, 0x0e, 0x12, + 0x0a, 0x0a, 0x06, 0x49, 0x54, 0x41, 0x4c, 0x49, 0x43, 0x10, 0x0f, 0x12, 0x0f, 0x0a, 0x0b, 0x42, + 0x4f, 0x4c, 0x44, 0x5f, 0x49, 0x54, 0x41, 0x4c, 0x49, 0x43, 0x10, 0x10, 0x12, 0x08, 0x0a, 0x04, + 0x43, 0x4f, 0x44, 0x45, 0x10, 0x11, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x10, + 0x12, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x13, 0x12, 0x0d, 0x0a, 0x09, 0x41, + 0x55, 0x54, 0x4f, 0x5f, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x14, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x41, + 0x47, 0x10, 0x15, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x52, 0x49, 0x4b, 0x45, 0x54, 0x48, 0x52, + 0x4f, 0x55, 0x47, 0x48, 0x10, 0x16, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x53, 0x43, 0x41, 0x50, 0x49, + 0x4e, 0x47, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52, 0x10, 0x17, 0x12, 0x08, + 0x0a, 0x04, 0x4d, 0x41, 0x54, 0x48, 0x10, 0x18, 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x49, 0x47, 0x48, + 0x4c, 0x49, 0x47, 0x48, 0x54, 0x10, 0x19, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x55, 0x42, 0x53, 0x43, + 0x52, 0x49, 0x50, 0x54, 0x10, 0x1a, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x55, 0x50, 0x45, 0x52, 0x53, + 0x43, 0x52, 0x49, 0x50, 0x54, 0x10, 0x1b, 0x32, 0x88, 0x01, 0x0a, 0x0f, 0x4d, 0x61, 0x72, 0x6b, + 0x64, 0x6f, 0x77, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x75, 0x0a, 0x0d, 0x50, + 0x61, 0x72, 0x73, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x22, 0x2e, 0x6d, + 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x61, 0x72, 0x73, + 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x23, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, + 0x50, 0x61, 0x72, 0x73, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, + 0x22, 0x10, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x6d, 0x61, 0x72, 0x6b, 0x64, 0x6f, + 0x77, 0x6e, 0x42, 0xac, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x42, 0x14, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, + 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x75, 0x73, 0x65, 0x6d, + 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x70, 0x69, 0x76, + 0x32, 0xa2, 0x02, 0x03, 0x4d, 0x41, 0x58, 0xaa, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, + 0x41, 0x70, 0x69, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, + 0x70, 0x69, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x18, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, + 0x69, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0xea, 0x02, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, + 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2353,7 +2428,7 @@ func file_api_v2_markdown_service_proto_rawDescGZIP() []byte { } var file_api_v2_markdown_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_api_v2_markdown_service_proto_msgTypes = make([]protoimpl.MessageInfo, 30) +var file_api_v2_markdown_service_proto_msgTypes = make([]protoimpl.MessageInfo, 31) var file_api_v2_markdown_service_proto_goTypes = []interface{}{ (NodeType)(0), // 0: memos.api.v2.NodeType (*ParseMarkdownRequest)(nil), // 1: memos.api.v2.ParseMarkdownRequest @@ -2370,22 +2445,23 @@ var file_api_v2_markdown_service_proto_goTypes = []interface{}{ (*TaskListNode)(nil), // 12: memos.api.v2.TaskListNode (*MathBlockNode)(nil), // 13: memos.api.v2.MathBlockNode (*TableNode)(nil), // 14: memos.api.v2.TableNode - (*TextNode)(nil), // 15: memos.api.v2.TextNode - (*BoldNode)(nil), // 16: memos.api.v2.BoldNode - (*ItalicNode)(nil), // 17: memos.api.v2.ItalicNode - (*BoldItalicNode)(nil), // 18: memos.api.v2.BoldItalicNode - (*CodeNode)(nil), // 19: memos.api.v2.CodeNode - (*ImageNode)(nil), // 20: memos.api.v2.ImageNode - (*LinkNode)(nil), // 21: memos.api.v2.LinkNode - (*AutoLinkNode)(nil), // 22: memos.api.v2.AutoLinkNode - (*TagNode)(nil), // 23: memos.api.v2.TagNode - (*StrikethroughNode)(nil), // 24: memos.api.v2.StrikethroughNode - (*EscapingCharacterNode)(nil), // 25: memos.api.v2.EscapingCharacterNode - (*MathNode)(nil), // 26: memos.api.v2.MathNode - (*HighlightNode)(nil), // 27: memos.api.v2.HighlightNode - (*SubscriptNode)(nil), // 28: memos.api.v2.SubscriptNode - (*SuperscriptNode)(nil), // 29: memos.api.v2.SuperscriptNode - (*TableNode_Row)(nil), // 30: memos.api.v2.TableNode.Row + (*EmbeddedContentNode)(nil), // 15: memos.api.v2.EmbeddedContentNode + (*TextNode)(nil), // 16: memos.api.v2.TextNode + (*BoldNode)(nil), // 17: memos.api.v2.BoldNode + (*ItalicNode)(nil), // 18: memos.api.v2.ItalicNode + (*BoldItalicNode)(nil), // 19: memos.api.v2.BoldItalicNode + (*CodeNode)(nil), // 20: memos.api.v2.CodeNode + (*ImageNode)(nil), // 21: memos.api.v2.ImageNode + (*LinkNode)(nil), // 22: memos.api.v2.LinkNode + (*AutoLinkNode)(nil), // 23: memos.api.v2.AutoLinkNode + (*TagNode)(nil), // 24: memos.api.v2.TagNode + (*StrikethroughNode)(nil), // 25: memos.api.v2.StrikethroughNode + (*EscapingCharacterNode)(nil), // 26: memos.api.v2.EscapingCharacterNode + (*MathNode)(nil), // 27: memos.api.v2.MathNode + (*HighlightNode)(nil), // 28: memos.api.v2.HighlightNode + (*SubscriptNode)(nil), // 29: memos.api.v2.SubscriptNode + (*SuperscriptNode)(nil), // 30: memos.api.v2.SuperscriptNode + (*TableNode_Row)(nil), // 31: memos.api.v2.TableNode.Row } var file_api_v2_markdown_service_proto_depIdxs = []int32{ 3, // 0: memos.api.v2.ParseMarkdownResponse.nodes:type_name -> memos.api.v2.Node @@ -2401,36 +2477,37 @@ var file_api_v2_markdown_service_proto_depIdxs = []int32{ 12, // 10: memos.api.v2.Node.task_list_node:type_name -> memos.api.v2.TaskListNode 13, // 11: memos.api.v2.Node.math_block_node:type_name -> memos.api.v2.MathBlockNode 14, // 12: memos.api.v2.Node.table_node:type_name -> memos.api.v2.TableNode - 15, // 13: memos.api.v2.Node.text_node:type_name -> memos.api.v2.TextNode - 16, // 14: memos.api.v2.Node.bold_node:type_name -> memos.api.v2.BoldNode - 17, // 15: memos.api.v2.Node.italic_node:type_name -> memos.api.v2.ItalicNode - 18, // 16: memos.api.v2.Node.bold_italic_node:type_name -> memos.api.v2.BoldItalicNode - 19, // 17: memos.api.v2.Node.code_node:type_name -> memos.api.v2.CodeNode - 20, // 18: memos.api.v2.Node.image_node:type_name -> memos.api.v2.ImageNode - 21, // 19: memos.api.v2.Node.link_node:type_name -> memos.api.v2.LinkNode - 22, // 20: memos.api.v2.Node.auto_link_node:type_name -> memos.api.v2.AutoLinkNode - 23, // 21: memos.api.v2.Node.tag_node:type_name -> memos.api.v2.TagNode - 24, // 22: memos.api.v2.Node.strikethrough_node:type_name -> memos.api.v2.StrikethroughNode - 25, // 23: memos.api.v2.Node.escaping_character_node:type_name -> memos.api.v2.EscapingCharacterNode - 26, // 24: memos.api.v2.Node.math_node:type_name -> memos.api.v2.MathNode - 27, // 25: memos.api.v2.Node.highlight_node:type_name -> memos.api.v2.HighlightNode - 28, // 26: memos.api.v2.Node.subscript_node:type_name -> memos.api.v2.SubscriptNode - 29, // 27: memos.api.v2.Node.superscript_node:type_name -> memos.api.v2.SuperscriptNode - 3, // 28: memos.api.v2.ParagraphNode.children:type_name -> memos.api.v2.Node - 3, // 29: memos.api.v2.HeadingNode.children:type_name -> memos.api.v2.Node - 3, // 30: memos.api.v2.BlockquoteNode.children:type_name -> memos.api.v2.Node - 3, // 31: memos.api.v2.OrderedListNode.children:type_name -> memos.api.v2.Node - 3, // 32: memos.api.v2.UnorderedListNode.children:type_name -> memos.api.v2.Node - 3, // 33: memos.api.v2.TaskListNode.children:type_name -> memos.api.v2.Node - 30, // 34: memos.api.v2.TableNode.rows:type_name -> memos.api.v2.TableNode.Row - 3, // 35: memos.api.v2.BoldNode.children:type_name -> memos.api.v2.Node - 1, // 36: memos.api.v2.MarkdownService.ParseMarkdown:input_type -> memos.api.v2.ParseMarkdownRequest - 2, // 37: memos.api.v2.MarkdownService.ParseMarkdown:output_type -> memos.api.v2.ParseMarkdownResponse - 37, // [37:38] is the sub-list for method output_type - 36, // [36:37] is the sub-list for method input_type - 36, // [36:36] is the sub-list for extension type_name - 36, // [36:36] is the sub-list for extension extendee - 0, // [0:36] is the sub-list for field type_name + 15, // 13: memos.api.v2.Node.embedded_content_node:type_name -> memos.api.v2.EmbeddedContentNode + 16, // 14: memos.api.v2.Node.text_node:type_name -> memos.api.v2.TextNode + 17, // 15: memos.api.v2.Node.bold_node:type_name -> memos.api.v2.BoldNode + 18, // 16: memos.api.v2.Node.italic_node:type_name -> memos.api.v2.ItalicNode + 19, // 17: memos.api.v2.Node.bold_italic_node:type_name -> memos.api.v2.BoldItalicNode + 20, // 18: memos.api.v2.Node.code_node:type_name -> memos.api.v2.CodeNode + 21, // 19: memos.api.v2.Node.image_node:type_name -> memos.api.v2.ImageNode + 22, // 20: memos.api.v2.Node.link_node:type_name -> memos.api.v2.LinkNode + 23, // 21: memos.api.v2.Node.auto_link_node:type_name -> memos.api.v2.AutoLinkNode + 24, // 22: memos.api.v2.Node.tag_node:type_name -> memos.api.v2.TagNode + 25, // 23: memos.api.v2.Node.strikethrough_node:type_name -> memos.api.v2.StrikethroughNode + 26, // 24: memos.api.v2.Node.escaping_character_node:type_name -> memos.api.v2.EscapingCharacterNode + 27, // 25: memos.api.v2.Node.math_node:type_name -> memos.api.v2.MathNode + 28, // 26: memos.api.v2.Node.highlight_node:type_name -> memos.api.v2.HighlightNode + 29, // 27: memos.api.v2.Node.subscript_node:type_name -> memos.api.v2.SubscriptNode + 30, // 28: memos.api.v2.Node.superscript_node:type_name -> memos.api.v2.SuperscriptNode + 3, // 29: memos.api.v2.ParagraphNode.children:type_name -> memos.api.v2.Node + 3, // 30: memos.api.v2.HeadingNode.children:type_name -> memos.api.v2.Node + 3, // 31: memos.api.v2.BlockquoteNode.children:type_name -> memos.api.v2.Node + 3, // 32: memos.api.v2.OrderedListNode.children:type_name -> memos.api.v2.Node + 3, // 33: memos.api.v2.UnorderedListNode.children:type_name -> memos.api.v2.Node + 3, // 34: memos.api.v2.TaskListNode.children:type_name -> memos.api.v2.Node + 31, // 35: memos.api.v2.TableNode.rows:type_name -> memos.api.v2.TableNode.Row + 3, // 36: memos.api.v2.BoldNode.children:type_name -> memos.api.v2.Node + 1, // 37: memos.api.v2.MarkdownService.ParseMarkdown:input_type -> memos.api.v2.ParseMarkdownRequest + 2, // 38: memos.api.v2.MarkdownService.ParseMarkdown:output_type -> memos.api.v2.ParseMarkdownResponse + 38, // [38:39] is the sub-list for method output_type + 37, // [37:38] is the sub-list for method input_type + 37, // [37:37] is the sub-list for extension type_name + 37, // [37:37] is the sub-list for extension extendee + 0, // [0:37] is the sub-list for field type_name } func init() { file_api_v2_markdown_service_proto_init() } @@ -2608,7 +2685,7 @@ func file_api_v2_markdown_service_proto_init() { } } file_api_v2_markdown_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TextNode); i { + switch v := v.(*EmbeddedContentNode); i { case 0: return &v.state case 1: @@ -2620,7 +2697,7 @@ func file_api_v2_markdown_service_proto_init() { } } file_api_v2_markdown_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BoldNode); i { + switch v := v.(*TextNode); i { case 0: return &v.state case 1: @@ -2632,7 +2709,7 @@ func file_api_v2_markdown_service_proto_init() { } } file_api_v2_markdown_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ItalicNode); i { + switch v := v.(*BoldNode); i { case 0: return &v.state case 1: @@ -2644,7 +2721,7 @@ func file_api_v2_markdown_service_proto_init() { } } file_api_v2_markdown_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BoldItalicNode); i { + switch v := v.(*ItalicNode); i { case 0: return &v.state case 1: @@ -2656,7 +2733,7 @@ func file_api_v2_markdown_service_proto_init() { } } file_api_v2_markdown_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CodeNode); i { + switch v := v.(*BoldItalicNode); i { case 0: return &v.state case 1: @@ -2668,7 +2745,7 @@ func file_api_v2_markdown_service_proto_init() { } } file_api_v2_markdown_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ImageNode); i { + switch v := v.(*CodeNode); i { case 0: return &v.state case 1: @@ -2680,7 +2757,7 @@ func file_api_v2_markdown_service_proto_init() { } } file_api_v2_markdown_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LinkNode); i { + switch v := v.(*ImageNode); i { case 0: return &v.state case 1: @@ -2692,7 +2769,7 @@ func file_api_v2_markdown_service_proto_init() { } } file_api_v2_markdown_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AutoLinkNode); i { + switch v := v.(*LinkNode); i { case 0: return &v.state case 1: @@ -2704,7 +2781,7 @@ func file_api_v2_markdown_service_proto_init() { } } file_api_v2_markdown_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TagNode); i { + switch v := v.(*AutoLinkNode); i { case 0: return &v.state case 1: @@ -2716,7 +2793,7 @@ func file_api_v2_markdown_service_proto_init() { } } file_api_v2_markdown_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StrikethroughNode); i { + switch v := v.(*TagNode); i { case 0: return &v.state case 1: @@ -2728,7 +2805,7 @@ func file_api_v2_markdown_service_proto_init() { } } file_api_v2_markdown_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EscapingCharacterNode); i { + switch v := v.(*StrikethroughNode); i { case 0: return &v.state case 1: @@ -2740,7 +2817,7 @@ func file_api_v2_markdown_service_proto_init() { } } file_api_v2_markdown_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MathNode); i { + switch v := v.(*EscapingCharacterNode); i { case 0: return &v.state case 1: @@ -2752,7 +2829,7 @@ func file_api_v2_markdown_service_proto_init() { } } file_api_v2_markdown_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HighlightNode); i { + switch v := v.(*MathNode); i { case 0: return &v.state case 1: @@ -2764,7 +2841,7 @@ func file_api_v2_markdown_service_proto_init() { } } file_api_v2_markdown_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscriptNode); i { + switch v := v.(*HighlightNode); i { case 0: return &v.state case 1: @@ -2776,7 +2853,7 @@ func file_api_v2_markdown_service_proto_init() { } } file_api_v2_markdown_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SuperscriptNode); i { + switch v := v.(*SubscriptNode); i { case 0: return &v.state case 1: @@ -2788,6 +2865,18 @@ func file_api_v2_markdown_service_proto_init() { } } file_api_v2_markdown_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SuperscriptNode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TableNode_Row); i { case 0: return &v.state @@ -2812,6 +2901,7 @@ func file_api_v2_markdown_service_proto_init() { (*Node_TaskListNode)(nil), (*Node_MathBlockNode)(nil), (*Node_TableNode)(nil), + (*Node_EmbeddedContentNode)(nil), (*Node_TextNode)(nil), (*Node_BoldNode)(nil), (*Node_ItalicNode)(nil), @@ -2834,7 +2924,7 @@ func file_api_v2_markdown_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_api_v2_markdown_service_proto_rawDesc, NumEnums: 1, - NumMessages: 30, + NumMessages: 31, NumExtensions: 0, NumServices: 1, }, diff --git a/web/src/components/MemoContent/EmbeddedContent/EmbeddedMemo.tsx b/web/src/components/MemoContent/EmbeddedContent/EmbeddedMemo.tsx new file mode 100644 index 00000000..47a600e1 --- /dev/null +++ b/web/src/components/MemoContent/EmbeddedContent/EmbeddedMemo.tsx @@ -0,0 +1,32 @@ +import { useContext, useEffect } from "react"; +import { useMemoStore } from "@/store/v1"; +import MemoContent from ".."; +import { RendererContext } from "../types"; + +interface Props { + memoId: number; +} + +const EmbeddedMemo = ({ memoId }: Props) => { + const context = useContext(RendererContext); + const memoStore = useMemoStore(); + const memo = memoStore.getMemoById(memoId); + const resourceName = `memos/${memoId}`; + + useEffect(() => { + memoStore.getOrFetchMemoById(memoId); + }, [memoId]); + + if (memoId === context.memoId || context.embeddedMemos.has(resourceName)) { + return
Nested Rendering Error: {`![[${resourceName}]]`}
; + } + context.embeddedMemos.add(resourceName); + + return ( +Unknown resource: {resourceName}
; +}; + +export default EmbeddedContent; diff --git a/web/src/components/MemoContent/Renderer.tsx b/web/src/components/MemoContent/Renderer.tsx index 0e973948..0c01438c 100644 --- a/web/src/components/MemoContent/Renderer.tsx +++ b/web/src/components/MemoContent/Renderer.tsx @@ -5,6 +5,7 @@ import { BoldNode, CodeBlockNode, CodeNode, + EmbeddedContentNode, EscapingCharacterNode, HeadingNode, HighlightNode, @@ -31,6 +32,7 @@ import Bold from "./Bold"; import BoldItalic from "./BoldItalic"; import Code from "./Code"; import CodeBlock from "./CodeBlock"; +import EmbeddedContent from "./EmbeddedContent"; import EscapingCharacter from "./EscapingCharacter"; import Heading from "./Heading"; import Highlight from "./Highlight"; @@ -80,6 +82,8 @@ const Renderer: React.FC