syntax = "proto3"; package memos.api.v2; import "google/api/annotations.proto"; option go_package = "gen/api/v2"; service MarkdownService { rpc ParseMarkdown(ParseMarkdownRequest) returns (ParseMarkdownResponse) { option (google.api.http) = { post: "/api/v2/markdown" body: "*" }; } } message ParseMarkdownRequest { string markdown = 1; } message ParseMarkdownResponse { repeated Node nodes = 1; } enum NodeType { NODE_UNSPECIFIED = 0; LINE_BREAK = 1; PARAGRAPH = 2; CODE_BLOCK = 3; HEADING = 4; HORIZONTAL_RULE = 5; BLOCKQUOTE = 6; ORDERED_LIST = 7; UNORDERED_LIST = 8; 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; } message Node { NodeType type = 1; oneof node { LineBreakNode line_break_node = 2; ParagraphNode paragraph_node = 3; CodeBlockNode code_block_node = 4; HeadingNode heading_node = 5; HorizontalRuleNode horizontal_rule_node = 6; BlockquoteNode blockquote_node = 7; OrderedListNode ordered_list_node = 8; UnorderedListNode unordered_list_node = 9; 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; } } message LineBreakNode {} message ParagraphNode { repeated Node children = 1; } message CodeBlockNode { string language = 1; string content = 2; } message HeadingNode { int32 level = 1; repeated Node children = 2; } message HorizontalRuleNode { string symbol = 1; } message BlockquoteNode { repeated Node children = 1; } message OrderedListNode { string number = 1; int32 indent = 2; repeated Node children = 3; } message UnorderedListNode { string symbol = 1; int32 indent = 2; repeated Node children = 3; } message TaskListNode { string symbol = 1; int32 indent = 2; bool complete = 3; repeated Node children = 4; } message MathBlockNode { string content = 1; } message TableNode { repeated string header = 1; repeated string delimiter = 2; message Row { repeated string cells = 1; } repeated Row rows = 3; } message TextNode { string content = 1; } message BoldNode { string symbol = 1; repeated Node children = 2; } message ItalicNode { string symbol = 1; string content = 2; } message BoldItalicNode { string symbol = 1; string content = 2; } message CodeNode { string content = 1; } message ImageNode { string alt_text = 1; string url = 2; } message LinkNode { string text = 1; string url = 2; } message AutoLinkNode { string url = 1; bool is_raw_text = 2; } message TagNode { string content = 1; } message StrikethroughNode { string content = 1; } message EscapingCharacterNode { string symbol = 1; } message MathNode { string content = 1; } message HighlightNode { string content = 1; } message SubscriptNode { string content = 1; } message SuperscriptNode { string content = 1; }