diff --git a/api/v2/markdown_service.go b/api/v2/markdown_service.go index 3fe6d059..87f3b756 100644 --- a/api/v2/markdown_service.go +++ b/api/v2/markdown_service.go @@ -63,6 +63,8 @@ func convertFromASTNode(rawNode ast.Node) *apiv2pb.Node { node.Node = &apiv2pb.Node_TaskListNode{TaskListNode: &apiv2pb.TaskListNode{Symbol: n.Symbol, Indent: int32(n.Indent), Complete: n.Complete, Children: children}} case *ast.MathBlock: node.Node = &apiv2pb.Node_MathBlockNode{MathBlockNode: &apiv2pb.MathBlockNode{Content: n.Content}} + case *ast.Table: + node.Node = &apiv2pb.Node_TableNode{TableNode: convertTableFromASTNode(n)} case *ast.Text: node.Node = &apiv2pb.Node_TextNode{TextNode: &apiv2pb.TextNode{Content: n.Content}} case *ast.Bold: @@ -134,6 +136,8 @@ func convertToASTNode(node *apiv2pb.Node) ast.Node { return &ast.TaskList{Symbol: n.TaskListNode.Symbol, Indent: int(n.TaskListNode.Indent), Complete: n.TaskListNode.Complete, Children: children} case *apiv2pb.Node_MathBlockNode: return &ast.MathBlock{Content: n.MathBlockNode.Content} + case *apiv2pb.Node_TableNode: + return convertTableToASTNode(node) case *apiv2pb.Node_TextNode: return &ast.Text{Content: n.TextNode.Content} case *apiv2pb.Node_BoldNode: @@ -166,6 +170,32 @@ func convertToASTNode(node *apiv2pb.Node) ast.Node { } } +func convertTableToASTNode(node *apiv2pb.Node) *ast.Table { + table := &ast.Table{ + Header: node.GetTableNode().Header, + } + for _, d := range node.GetTableNode().Delimiter { + table.Delimiter = append(table.Delimiter, int(d)) + } + for _, row := range node.GetTableNode().Rows { + table.Rows = append(table.Rows, row.Cells) + } + return table +} + +func convertTableFromASTNode(node *ast.Table) *apiv2pb.TableNode { + table := &apiv2pb.TableNode{ + Header: node.Header, + } + for _, d := range node.Delimiter { + table.Delimiter = append(table.Delimiter, int32(d)) + } + for _, row := range node.Rows { + table.Rows = append(table.Rows, &apiv2pb.TableNode_Row{Cells: row}) + } + return table +} + func traverseASTNodes(nodes []ast.Node, fn func(ast.Node)) { for _, node := range nodes { fn(node) diff --git a/proto/api/v2/markdown_service.proto b/proto/api/v2/markdown_service.proto index 4ddcc257..2441bea8 100644 --- a/proto/api/v2/markdown_service.proto +++ b/proto/api/v2/markdown_service.proto @@ -35,19 +35,20 @@ enum NodeType { UNORDERED_LIST = 8; TASK_LIST = 9; MATH_BLOCK = 10; - TEXT = 11; - BOLD = 12; - ITALIC = 13; - BOLD_ITALIC = 14; - CODE = 15; - IMAGE = 16; - LINK = 17; - AUTO_LINK = 18; - TAG = 19; - STRIKETHROUGH = 20; - ESCAPING_CHARACTER = 21; - MATH = 22; - HIGHLIGHT = 23; + 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; } message Node { @@ -63,19 +64,20 @@ message Node { UnorderedListNode unordered_list_node = 9; TaskListNode task_list_node = 10; MathBlockNode math_block_node = 11; - TextNode text_node = 12; - BoldNode bold_node = 13; - ItalicNode italic_node = 14; - BoldItalicNode bold_italic_node = 15; - CodeNode code_node = 16; - ImageNode image_node = 17; - LinkNode link_node = 18; - AutoLinkNode auto_link_node = 19; - TagNode tag_node = 20; - StrikethroughNode strikethrough_node = 21; - EscapingCharacterNode escaping_character_node = 22; - MathNode math_node = 23; - HighlightNode highlight_node = 24; + 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; } } @@ -126,6 +128,16 @@ message MathBlockNode { string content = 1; } +message TableNode { + repeated string header = 1; + repeated int32 delimiter = 2; + + message Row { + repeated string cells = 1; + } + repeated Row rows = 3; +} + message TextNode { string content = 1; } diff --git a/proto/gen/api/v2/README.md b/proto/gen/api/v2/README.md index 34ef4b52..2f18e784 100644 --- a/proto/gen/api/v2/README.md +++ b/proto/gen/api/v2/README.md @@ -88,6 +88,8 @@ - [ParseMarkdownRequest](#memos-api-v2-ParseMarkdownRequest) - [ParseMarkdownResponse](#memos-api-v2-ParseMarkdownResponse) - [StrikethroughNode](#memos-api-v2-StrikethroughNode) + - [TableNode](#memos-api-v2-TableNode) + - [TableNode.Row](#memos-api-v2-TableNode-Row) - [TagNode](#memos-api-v2-TagNode) - [TaskListNode](#memos-api-v2-TaskListNode) - [TextNode](#memos-api-v2-TextNode) @@ -1222,6 +1224,7 @@ | unordered_list_node | [UnorderedListNode](#memos-api-v2-UnorderedListNode) | | | | task_list_node | [TaskListNode](#memos-api-v2-TaskListNode) | | | | math_block_node | [MathBlockNode](#memos-api-v2-MathBlockNode) | | | +| table_node | [TableNode](#memos-api-v2-TableNode) | | | | text_node | [TextNode](#memos-api-v2-TextNode) | | | | bold_node | [BoldNode](#memos-api-v2-BoldNode) | | | | italic_node | [ItalicNode](#memos-api-v2-ItalicNode) | | | @@ -1318,6 +1321,38 @@ + + +### TableNode + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| header | [string](#string) | repeated | | +| delimiter | [int32](#int32) | repeated | | +| rows | [TableNode.Row](#memos-api-v2-TableNode-Row) | repeated | | + + + + + + + + +### TableNode.Row + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| cells | [string](#string) | repeated | | + + + + + + ### TagNode @@ -1403,19 +1438,20 @@ | UNORDERED_LIST | 8 | | | TASK_LIST | 9 | | | MATH_BLOCK | 10 | | -| TEXT | 11 | | -| BOLD | 12 | | -| ITALIC | 13 | | -| BOLD_ITALIC | 14 | | -| CODE | 15 | | -| IMAGE | 16 | | -| LINK | 17 | | -| AUTO_LINK | 18 | | -| TAG | 19 | | -| STRIKETHROUGH | 20 | | -| ESCAPING_CHARACTER | 21 | | -| MATH | 22 | | -| HIGHLIGHT | 23 | | +| 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 | | diff --git a/proto/gen/api/v2/markdown_service.pb.go b/proto/gen/api/v2/markdown_service.pb.go index 158c0d34..8cb2e6de 100644 --- a/proto/gen/api/v2/markdown_service.pb.go +++ b/proto/gen/api/v2/markdown_service.pb.go @@ -35,19 +35,20 @@ const ( NodeType_UNORDERED_LIST NodeType = 8 NodeType_TASK_LIST NodeType = 9 NodeType_MATH_BLOCK NodeType = 10 - NodeType_TEXT NodeType = 11 - NodeType_BOLD NodeType = 12 - NodeType_ITALIC NodeType = 13 - NodeType_BOLD_ITALIC NodeType = 14 - NodeType_CODE NodeType = 15 - NodeType_IMAGE NodeType = 16 - NodeType_LINK NodeType = 17 - NodeType_AUTO_LINK NodeType = 18 - NodeType_TAG NodeType = 19 - NodeType_STRIKETHROUGH NodeType = 20 - NodeType_ESCAPING_CHARACTER NodeType = 21 - NodeType_MATH NodeType = 22 - NodeType_HIGHLIGHT NodeType = 23 + 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 ) // Enum value maps for NodeType. @@ -64,19 +65,20 @@ var ( 8: "UNORDERED_LIST", 9: "TASK_LIST", 10: "MATH_BLOCK", - 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", + 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", } NodeType_value = map[string]int32{ "NODE_UNSPECIFIED": 0, @@ -90,19 +92,20 @@ var ( "UNORDERED_LIST": 8, "TASK_LIST": 9, "MATH_BLOCK": 10, - "TEXT": 11, - "BOLD": 12, - "ITALIC": 13, - "BOLD_ITALIC": 14, - "CODE": 15, - "IMAGE": 16, - "LINK": 17, - "AUTO_LINK": 18, - "TAG": 19, - "STRIKETHROUGH": 20, - "ESCAPING_CHARACTER": 21, - "MATH": 22, - "HIGHLIGHT": 23, + "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, } ) @@ -245,6 +248,7 @@ type Node struct { // *Node_UnorderedListNode // *Node_TaskListNode // *Node_MathBlockNode + // *Node_TableNode // *Node_TextNode // *Node_BoldNode // *Node_ItalicNode @@ -377,6 +381,13 @@ func (x *Node) GetMathBlockNode() *MathBlockNode { return nil } +func (x *Node) GetTableNode() *TableNode { + if x, ok := x.GetNode().(*Node_TableNode); ok { + return x.TableNode + } + return nil +} + func (x *Node) GetTextNode() *TextNode { if x, ok := x.GetNode().(*Node_TextNode); ok { return x.TextNode @@ -512,56 +523,60 @@ type Node_MathBlockNode struct { MathBlockNode *MathBlockNode `protobuf:"bytes,11,opt,name=math_block_node,json=mathBlockNode,proto3,oneof"` } +type Node_TableNode struct { + TableNode *TableNode `protobuf:"bytes,12,opt,name=table_node,json=tableNode,proto3,oneof"` +} + type Node_TextNode struct { - TextNode *TextNode `protobuf:"bytes,12,opt,name=text_node,json=textNode,proto3,oneof"` + TextNode *TextNode `protobuf:"bytes,13,opt,name=text_node,json=textNode,proto3,oneof"` } type Node_BoldNode struct { - BoldNode *BoldNode `protobuf:"bytes,13,opt,name=bold_node,json=boldNode,proto3,oneof"` + BoldNode *BoldNode `protobuf:"bytes,14,opt,name=bold_node,json=boldNode,proto3,oneof"` } type Node_ItalicNode struct { - ItalicNode *ItalicNode `protobuf:"bytes,14,opt,name=italic_node,json=italicNode,proto3,oneof"` + ItalicNode *ItalicNode `protobuf:"bytes,15,opt,name=italic_node,json=italicNode,proto3,oneof"` } type Node_BoldItalicNode struct { - BoldItalicNode *BoldItalicNode `protobuf:"bytes,15,opt,name=bold_italic_node,json=boldItalicNode,proto3,oneof"` + BoldItalicNode *BoldItalicNode `protobuf:"bytes,16,opt,name=bold_italic_node,json=boldItalicNode,proto3,oneof"` } type Node_CodeNode struct { - CodeNode *CodeNode `protobuf:"bytes,16,opt,name=code_node,json=codeNode,proto3,oneof"` + CodeNode *CodeNode `protobuf:"bytes,17,opt,name=code_node,json=codeNode,proto3,oneof"` } type Node_ImageNode struct { - ImageNode *ImageNode `protobuf:"bytes,17,opt,name=image_node,json=imageNode,proto3,oneof"` + ImageNode *ImageNode `protobuf:"bytes,18,opt,name=image_node,json=imageNode,proto3,oneof"` } type Node_LinkNode struct { - LinkNode *LinkNode `protobuf:"bytes,18,opt,name=link_node,json=linkNode,proto3,oneof"` + LinkNode *LinkNode `protobuf:"bytes,19,opt,name=link_node,json=linkNode,proto3,oneof"` } type Node_AutoLinkNode struct { - AutoLinkNode *AutoLinkNode `protobuf:"bytes,19,opt,name=auto_link_node,json=autoLinkNode,proto3,oneof"` + AutoLinkNode *AutoLinkNode `protobuf:"bytes,20,opt,name=auto_link_node,json=autoLinkNode,proto3,oneof"` } type Node_TagNode struct { - TagNode *TagNode `protobuf:"bytes,20,opt,name=tag_node,json=tagNode,proto3,oneof"` + TagNode *TagNode `protobuf:"bytes,21,opt,name=tag_node,json=tagNode,proto3,oneof"` } type Node_StrikethroughNode struct { - StrikethroughNode *StrikethroughNode `protobuf:"bytes,21,opt,name=strikethrough_node,json=strikethroughNode,proto3,oneof"` + StrikethroughNode *StrikethroughNode `protobuf:"bytes,22,opt,name=strikethrough_node,json=strikethroughNode,proto3,oneof"` } type Node_EscapingCharacterNode struct { - EscapingCharacterNode *EscapingCharacterNode `protobuf:"bytes,22,opt,name=escaping_character_node,json=escapingCharacterNode,proto3,oneof"` + EscapingCharacterNode *EscapingCharacterNode `protobuf:"bytes,23,opt,name=escaping_character_node,json=escapingCharacterNode,proto3,oneof"` } type Node_MathNode struct { - MathNode *MathNode `protobuf:"bytes,23,opt,name=math_node,json=mathNode,proto3,oneof"` + MathNode *MathNode `protobuf:"bytes,24,opt,name=math_node,json=mathNode,proto3,oneof"` } type Node_HighlightNode struct { - HighlightNode *HighlightNode `protobuf:"bytes,24,opt,name=highlight_node,json=highlightNode,proto3,oneof"` + HighlightNode *HighlightNode `protobuf:"bytes,25,opt,name=highlight_node,json=highlightNode,proto3,oneof"` } func (*Node_LineBreakNode) isNode_Node() {} @@ -584,6 +599,8 @@ func (*Node_TaskListNode) isNode_Node() {} func (*Node_MathBlockNode) isNode_Node() {} +func (*Node_TableNode) isNode_Node() {} + func (*Node_TextNode) isNode_Node() {} func (*Node_BoldNode) isNode_Node() {} @@ -1143,6 +1160,69 @@ func (x *MathBlockNode) GetContent() string { return "" } +type TableNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Header []string `protobuf:"bytes,1,rep,name=header,proto3" json:"header,omitempty"` + Delimiter []int32 `protobuf:"varint,2,rep,packed,name=delimiter,proto3" json:"delimiter,omitempty"` + Rows []*TableNode_Row `protobuf:"bytes,3,rep,name=rows,proto3" json:"rows,omitempty"` +} + +func (x *TableNode) Reset() { + *x = TableNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TableNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TableNode) ProtoMessage() {} + +func (x *TableNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[13] + 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 TableNode.ProtoReflect.Descriptor instead. +func (*TableNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{13} +} + +func (x *TableNode) GetHeader() []string { + if x != nil { + return x.Header + } + return nil +} + +func (x *TableNode) GetDelimiter() []int32 { + if x != nil { + return x.Delimiter + } + return nil +} + +func (x *TableNode) GetRows() []*TableNode_Row { + if x != nil { + return x.Rows + } + return nil +} + type TextNode struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1154,7 +1234,7 @@ type TextNode struct { func (x *TextNode) Reset() { *x = TextNode{} if protoimpl.UnsafeEnabled { - mi := &file_api_v2_markdown_service_proto_msgTypes[13] + mi := &file_api_v2_markdown_service_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1167,7 +1247,7 @@ func (x *TextNode) String() string { func (*TextNode) ProtoMessage() {} func (x *TextNode) ProtoReflect() protoreflect.Message { - mi := &file_api_v2_markdown_service_proto_msgTypes[13] + 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 { @@ -1180,7 +1260,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{13} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{14} } func (x *TextNode) GetContent() string { @@ -1202,7 +1282,7 @@ type BoldNode struct { func (x *BoldNode) Reset() { *x = BoldNode{} 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) } @@ -1215,7 +1295,7 @@ func (x *BoldNode) String() string { func (*BoldNode) ProtoMessage() {} func (x *BoldNode) 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 { @@ -1228,7 +1308,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{14} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{15} } func (x *BoldNode) GetSymbol() string { @@ -1257,7 +1337,7 @@ type ItalicNode struct { func (x *ItalicNode) Reset() { *x = ItalicNode{} 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) } @@ -1270,7 +1350,7 @@ func (x *ItalicNode) String() string { func (*ItalicNode) ProtoMessage() {} func (x *ItalicNode) 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 { @@ -1283,7 +1363,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{15} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{16} } func (x *ItalicNode) GetSymbol() string { @@ -1312,7 +1392,7 @@ type BoldItalicNode struct { func (x *BoldItalicNode) Reset() { *x = BoldItalicNode{} 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) } @@ -1325,7 +1405,7 @@ func (x *BoldItalicNode) String() string { func (*BoldItalicNode) ProtoMessage() {} func (x *BoldItalicNode) 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 { @@ -1338,7 +1418,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{16} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{17} } func (x *BoldItalicNode) GetSymbol() string { @@ -1366,7 +1446,7 @@ type CodeNode struct { func (x *CodeNode) Reset() { *x = CodeNode{} 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) } @@ -1379,7 +1459,7 @@ func (x *CodeNode) String() string { func (*CodeNode) ProtoMessage() {} func (x *CodeNode) 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 { @@ -1392,7 +1472,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{17} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{18} } func (x *CodeNode) GetContent() string { @@ -1414,7 +1494,7 @@ type ImageNode struct { func (x *ImageNode) Reset() { *x = ImageNode{} 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) } @@ -1427,7 +1507,7 @@ func (x *ImageNode) String() string { func (*ImageNode) ProtoMessage() {} func (x *ImageNode) 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 { @@ -1440,7 +1520,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{18} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{19} } func (x *ImageNode) GetAltText() string { @@ -1469,7 +1549,7 @@ type LinkNode struct { func (x *LinkNode) Reset() { *x = LinkNode{} 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) } @@ -1482,7 +1562,7 @@ func (x *LinkNode) String() string { func (*LinkNode) ProtoMessage() {} func (x *LinkNode) 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 { @@ -1495,7 +1575,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{19} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{20} } func (x *LinkNode) GetText() string { @@ -1524,7 +1604,7 @@ type AutoLinkNode struct { func (x *AutoLinkNode) Reset() { *x = AutoLinkNode{} 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) } @@ -1537,7 +1617,7 @@ func (x *AutoLinkNode) String() string { func (*AutoLinkNode) ProtoMessage() {} func (x *AutoLinkNode) 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 { @@ -1550,7 +1630,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{20} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{21} } func (x *AutoLinkNode) GetUrl() string { @@ -1578,7 +1658,7 @@ type TagNode struct { func (x *TagNode) Reset() { *x = TagNode{} 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) } @@ -1591,7 +1671,7 @@ func (x *TagNode) String() string { func (*TagNode) ProtoMessage() {} func (x *TagNode) 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 { @@ -1604,7 +1684,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{21} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{22} } func (x *TagNode) GetContent() string { @@ -1625,7 +1705,7 @@ type StrikethroughNode struct { func (x *StrikethroughNode) Reset() { *x = StrikethroughNode{} 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) } @@ -1638,7 +1718,7 @@ func (x *StrikethroughNode) String() string { func (*StrikethroughNode) ProtoMessage() {} func (x *StrikethroughNode) 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 { @@ -1651,7 +1731,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{22} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{23} } func (x *StrikethroughNode) GetContent() string { @@ -1672,7 +1752,7 @@ type EscapingCharacterNode struct { func (x *EscapingCharacterNode) Reset() { *x = EscapingCharacterNode{} 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) } @@ -1685,7 +1765,7 @@ func (x *EscapingCharacterNode) String() string { func (*EscapingCharacterNode) ProtoMessage() {} func (x *EscapingCharacterNode) 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 { @@ -1698,7 +1778,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{23} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{24} } func (x *EscapingCharacterNode) GetSymbol() string { @@ -1719,7 +1799,7 @@ type MathNode struct { func (x *MathNode) Reset() { *x = MathNode{} 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) } @@ -1732,7 +1812,7 @@ func (x *MathNode) String() string { func (*MathNode) ProtoMessage() {} func (x *MathNode) 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 { @@ -1745,7 +1825,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{24} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{25} } func (x *MathNode) GetContent() string { @@ -1766,7 +1846,7 @@ type HighlightNode struct { func (x *HighlightNode) Reset() { *x = HighlightNode{} 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) } @@ -1779,7 +1859,7 @@ func (x *HighlightNode) String() string { func (*HighlightNode) ProtoMessage() {} func (x *HighlightNode) 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 { @@ -1792,7 +1872,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{25} + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{26} } func (x *HighlightNode) GetContent() string { @@ -1802,6 +1882,53 @@ func (x *HighlightNode) GetContent() string { return "" } +type TableNode_Row struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Cells []string `protobuf:"bytes,1,rep,name=cells,proto3" json:"cells,omitempty"` +} + +func (x *TableNode_Row) Reset() { + *x = TableNode_Row{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TableNode_Row) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TableNode_Row) ProtoMessage() {} + +func (x *TableNode_Row) ProtoReflect() protoreflect.Message { + 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 { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TableNode_Row.ProtoReflect.Descriptor instead. +func (*TableNode_Row) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{13, 0} +} + +func (x *TableNode_Row) GetCells() []string { + if x != nil { + return x.Cells + } + return nil +} + var File_api_v2_markdown_service_proto protoreflect.FileDescriptor var file_api_v2_markdown_service_proto_rawDesc = []byte{ @@ -1817,7 +1944,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, 0xdb, 0x0c, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x04, 0x74, + 0x65, 0x73, 0x22, 0x95, 0x0d, 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, @@ -1866,193 +1993,207 @@ var file_api_v2_markdown_service_proto_rawDesc = []byte{ 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x6d, 0x61, 0x74, 0x68, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x6e, 0x6f, - 0x64, 0x65, 0x18, 0x0c, 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, 0x0d, 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, 0x0e, 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, 0x0f, 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, 0x10, 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, - 0x11, 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, 0x12, 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, 0x13, 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, 0x14, 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, 0x15, 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, 0x16, 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, 0x17, 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, 0x18, 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, 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, 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, + 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, + 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, + 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, 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, 0x3e, 0x0a, 0x0a, 0x49, 0x74, 0x61, 0x6c, + 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, + 0x05, 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, 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, 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, + 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, 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, 0x2a, 0xf2, 0x02, 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, - 0x08, 0x0a, 0x04, 0x54, 0x45, 0x58, 0x54, 0x10, 0x0b, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4f, 0x4c, - 0x44, 0x10, 0x0c, 0x12, 0x0a, 0x0a, 0x06, 0x49, 0x54, 0x41, 0x4c, 0x49, 0x43, 0x10, 0x0d, 0x12, - 0x0f, 0x0a, 0x0b, 0x42, 0x4f, 0x4c, 0x44, 0x5f, 0x49, 0x54, 0x41, 0x4c, 0x49, 0x43, 0x10, 0x0e, - 0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x0f, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4d, - 0x41, 0x47, 0x45, 0x10, 0x10, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x11, 0x12, - 0x0d, 0x0a, 0x09, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x12, 0x12, 0x07, - 0x0a, 0x03, 0x54, 0x41, 0x47, 0x10, 0x13, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x52, 0x49, 0x4b, - 0x45, 0x54, 0x48, 0x52, 0x4f, 0x55, 0x47, 0x48, 0x10, 0x14, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x53, - 0x43, 0x41, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52, - 0x10, 0x15, 0x12, 0x08, 0x0a, 0x04, 0x4d, 0x41, 0x54, 0x48, 0x10, 0x16, 0x12, 0x0d, 0x0a, 0x09, - 0x48, 0x49, 0x47, 0x48, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x10, 0x17, 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, + 0x6e, 0x74, 0x2a, 0xfd, 0x02, 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, 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 ( @@ -2068,7 +2209,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, 26) +var file_api_v2_markdown_service_proto_msgTypes = make([]protoimpl.MessageInfo, 28) var file_api_v2_markdown_service_proto_goTypes = []interface{}{ (NodeType)(0), // 0: memos.api.v2.NodeType (*ParseMarkdownRequest)(nil), // 1: memos.api.v2.ParseMarkdownRequest @@ -2084,19 +2225,21 @@ var file_api_v2_markdown_service_proto_goTypes = []interface{}{ (*UnorderedListNode)(nil), // 11: memos.api.v2.UnorderedListNode (*TaskListNode)(nil), // 12: memos.api.v2.TaskListNode (*MathBlockNode)(nil), // 13: memos.api.v2.MathBlockNode - (*TextNode)(nil), // 14: memos.api.v2.TextNode - (*BoldNode)(nil), // 15: memos.api.v2.BoldNode - (*ItalicNode)(nil), // 16: memos.api.v2.ItalicNode - (*BoldItalicNode)(nil), // 17: memos.api.v2.BoldItalicNode - (*CodeNode)(nil), // 18: memos.api.v2.CodeNode - (*ImageNode)(nil), // 19: memos.api.v2.ImageNode - (*LinkNode)(nil), // 20: memos.api.v2.LinkNode - (*AutoLinkNode)(nil), // 21: memos.api.v2.AutoLinkNode - (*TagNode)(nil), // 22: memos.api.v2.TagNode - (*StrikethroughNode)(nil), // 23: memos.api.v2.StrikethroughNode - (*EscapingCharacterNode)(nil), // 24: memos.api.v2.EscapingCharacterNode - (*MathNode)(nil), // 25: memos.api.v2.MathNode - (*HighlightNode)(nil), // 26: memos.api.v2.HighlightNode + (*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 + (*TableNode_Row)(nil), // 28: 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 @@ -2111,33 +2254,35 @@ var file_api_v2_markdown_service_proto_depIdxs = []int32{ 11, // 9: memos.api.v2.Node.unordered_list_node:type_name -> memos.api.v2.UnorderedListNode 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.text_node:type_name -> memos.api.v2.TextNode - 15, // 13: memos.api.v2.Node.bold_node:type_name -> memos.api.v2.BoldNode - 16, // 14: memos.api.v2.Node.italic_node:type_name -> memos.api.v2.ItalicNode - 17, // 15: memos.api.v2.Node.bold_italic_node:type_name -> memos.api.v2.BoldItalicNode - 18, // 16: memos.api.v2.Node.code_node:type_name -> memos.api.v2.CodeNode - 19, // 17: memos.api.v2.Node.image_node:type_name -> memos.api.v2.ImageNode - 20, // 18: memos.api.v2.Node.link_node:type_name -> memos.api.v2.LinkNode - 21, // 19: memos.api.v2.Node.auto_link_node:type_name -> memos.api.v2.AutoLinkNode - 22, // 20: memos.api.v2.Node.tag_node:type_name -> memos.api.v2.TagNode - 23, // 21: memos.api.v2.Node.strikethrough_node:type_name -> memos.api.v2.StrikethroughNode - 24, // 22: memos.api.v2.Node.escaping_character_node:type_name -> memos.api.v2.EscapingCharacterNode - 25, // 23: memos.api.v2.Node.math_node:type_name -> memos.api.v2.MathNode - 26, // 24: memos.api.v2.Node.highlight_node:type_name -> memos.api.v2.HighlightNode - 3, // 25: memos.api.v2.ParagraphNode.children:type_name -> memos.api.v2.Node - 3, // 26: memos.api.v2.HeadingNode.children:type_name -> memos.api.v2.Node - 3, // 27: memos.api.v2.BlockquoteNode.children:type_name -> memos.api.v2.Node - 3, // 28: memos.api.v2.OrderedListNode.children:type_name -> memos.api.v2.Node - 3, // 29: memos.api.v2.UnorderedListNode.children:type_name -> memos.api.v2.Node - 3, // 30: memos.api.v2.TaskListNode.children:type_name -> memos.api.v2.Node - 3, // 31: memos.api.v2.BoldNode.children:type_name -> memos.api.v2.Node - 1, // 32: memos.api.v2.MarkdownService.ParseMarkdown:input_type -> memos.api.v2.ParseMarkdownRequest - 2, // 33: memos.api.v2.MarkdownService.ParseMarkdown:output_type -> memos.api.v2.ParseMarkdownResponse - 33, // [33:34] is the sub-list for method output_type - 32, // [32:33] is the sub-list for method input_type - 32, // [32:32] is the sub-list for extension type_name - 32, // [32:32] is the sub-list for extension extendee - 0, // [0:32] is the sub-list for field type_name + 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 + 3, // 26: memos.api.v2.ParagraphNode.children:type_name -> memos.api.v2.Node + 3, // 27: memos.api.v2.HeadingNode.children:type_name -> memos.api.v2.Node + 3, // 28: memos.api.v2.BlockquoteNode.children:type_name -> memos.api.v2.Node + 3, // 29: memos.api.v2.OrderedListNode.children:type_name -> memos.api.v2.Node + 3, // 30: memos.api.v2.UnorderedListNode.children:type_name -> memos.api.v2.Node + 3, // 31: memos.api.v2.TaskListNode.children:type_name -> memos.api.v2.Node + 28, // 32: memos.api.v2.TableNode.rows:type_name -> memos.api.v2.TableNode.Row + 3, // 33: memos.api.v2.BoldNode.children:type_name -> memos.api.v2.Node + 1, // 34: memos.api.v2.MarkdownService.ParseMarkdown:input_type -> memos.api.v2.ParseMarkdownRequest + 2, // 35: memos.api.v2.MarkdownService.ParseMarkdown:output_type -> memos.api.v2.ParseMarkdownResponse + 35, // [35:36] is the sub-list for method output_type + 34, // [34:35] is the sub-list for method input_type + 34, // [34:34] is the sub-list for extension type_name + 34, // [34:34] is the sub-list for extension extendee + 0, // [0:34] is the sub-list for field type_name } func init() { file_api_v2_markdown_service_proto_init() } @@ -2303,7 +2448,7 @@ func file_api_v2_markdown_service_proto_init() { } } file_api_v2_markdown_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TextNode); i { + switch v := v.(*TableNode); i { case 0: return &v.state case 1: @@ -2315,7 +2460,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.(*BoldNode); i { + switch v := v.(*TextNode); i { case 0: return &v.state case 1: @@ -2327,7 +2472,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.(*ItalicNode); i { + switch v := v.(*BoldNode); i { case 0: return &v.state case 1: @@ -2339,7 +2484,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.(*BoldItalicNode); i { + switch v := v.(*ItalicNode); i { case 0: return &v.state case 1: @@ -2351,7 +2496,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.(*CodeNode); i { + switch v := v.(*BoldItalicNode); i { case 0: return &v.state case 1: @@ -2363,7 +2508,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.(*ImageNode); i { + switch v := v.(*CodeNode); i { case 0: return &v.state case 1: @@ -2375,7 +2520,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.(*LinkNode); i { + switch v := v.(*ImageNode); i { case 0: return &v.state case 1: @@ -2387,7 +2532,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.(*AutoLinkNode); i { + switch v := v.(*LinkNode); i { case 0: return &v.state case 1: @@ -2399,7 +2544,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.(*TagNode); i { + switch v := v.(*AutoLinkNode); i { case 0: return &v.state case 1: @@ -2411,7 +2556,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.(*StrikethroughNode); i { + switch v := v.(*TagNode); i { case 0: return &v.state case 1: @@ -2423,7 +2568,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.(*EscapingCharacterNode); i { + switch v := v.(*StrikethroughNode); i { case 0: return &v.state case 1: @@ -2435,7 +2580,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.(*MathNode); i { + switch v := v.(*EscapingCharacterNode); i { case 0: return &v.state case 1: @@ -2447,6 +2592,18 @@ 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 { + 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[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HighlightNode); i { case 0: return &v.state @@ -2458,6 +2615,18 @@ func file_api_v2_markdown_service_proto_init() { return nil } } + file_api_v2_markdown_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TableNode_Row); 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[2].OneofWrappers = []interface{}{ (*Node_LineBreakNode)(nil), @@ -2470,6 +2639,7 @@ func file_api_v2_markdown_service_proto_init() { (*Node_UnorderedListNode)(nil), (*Node_TaskListNode)(nil), (*Node_MathBlockNode)(nil), + (*Node_TableNode)(nil), (*Node_TextNode)(nil), (*Node_BoldNode)(nil), (*Node_ItalicNode)(nil), @@ -2490,7 +2660,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: 26, + NumMessages: 28, NumExtensions: 0, NumServices: 1, }, diff --git a/web/src/components/MemoContent/Renderer.tsx b/web/src/components/MemoContent/Renderer.tsx index 64efe05d..b3ba1f47 100644 --- a/web/src/components/MemoContent/Renderer.tsx +++ b/web/src/components/MemoContent/Renderer.tsx @@ -18,6 +18,7 @@ import { OrderedListNode, ParagraphNode, StrikethroughNode, + TableNode, TagNode, TaskListNode, TextNode, @@ -40,6 +41,7 @@ import Math from "./Math"; import OrderedList from "./OrderedList"; import Paragraph from "./Paragraph"; import Strikethrough from "./Strikethrough"; +import Table from "./Table"; import Tag from "./Tag"; import TaskList from "./TaskList"; import Text from "./Text"; @@ -72,6 +74,8 @@ const Renderer: React.FC = ({ index, node }: Props) => { return ; case NodeType.MATH_BLOCK: return ; + case NodeType.TABLE: + return ; case NodeType.TEXT: return ; case NodeType.BOLD: diff --git a/web/src/components/MemoContent/Table.tsx b/web/src/components/MemoContent/Table.tsx new file mode 100644 index 00000000..c5dc18f0 --- /dev/null +++ b/web/src/components/MemoContent/Table.tsx @@ -0,0 +1,35 @@ +import { TableNode_Row } from "@/types/proto/api/v2/markdown_service"; + +interface Props { + header: string[]; + rows: TableNode_Row[]; +} + +const Table = ({ header, rows }: Props) => { + return ( +
+ + + {header.map((h, i) => ( + + ))} + + + + {rows.map((row, i) => ( + + {row.cells.map((r, j) => ( + + ))} + + ))} + +
+ {h} +
+ {r} +
+ ); +}; + +export default Table;