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; 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; } 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; 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; } } 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; repeated Node children = 2; } message UnorderedListNode { string symbol = 1; repeated Node children = 2; } message TaskListNode { string symbol = 1; bool complete = 2; repeated Node children = 3; } message MathBlockNode { string content = 1; } 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; }