this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

more

+41 -36
+41 -36
stack/river/lib/markdown_converter.ml
··· 87 87 need_space := has_whitespace (Buffer.contents buffer) || Buffer.length buffer > 0 88 88 in 89 89 90 + (* Process header with ID/anchor handling *) 91 + let process_header level elem = 92 + need_space := false; 93 + 94 + (* Check if header contains a link with an ID fragment *) 95 + let link_opt = Soup.select_one "a[href]" elem in 96 + let anchor_id = match link_opt with 97 + | Some link -> 98 + (match Soup.attribute "href" link with 99 + | Some href -> 100 + (* Extract fragment from URL *) 101 + let uri = Uri.of_string href in 102 + Uri.fragment uri 103 + | None -> None) 104 + | None -> None 105 + in 106 + 107 + (* Add anchor if we found an ID *) 108 + (match anchor_id with 109 + | Some id when id <> "" -> 110 + Buffer.add_string buffer (Printf.sprintf "\n<a name=\"%s\"></a>\n" id) 111 + | _ -> ()); 112 + 113 + (* Add the header marker *) 114 + let marker = String.make level '#' in 115 + Buffer.add_string buffer ("\n" ^ marker ^ " "); 116 + 117 + (* Get text content, excluding link tags *) 118 + let text = Soup.texts elem |> String.concat " " |> String.trim in 119 + Buffer.add_string buffer text; 120 + 121 + Buffer.add_string buffer "\n\n"; 122 + need_space := false 123 + in 124 + 90 125 let rec process_node node = 91 126 match Soup.element node with 92 127 | Some elem -> 93 128 let tag = Soup.name elem in 94 129 (match tag with 95 130 (* Block elements - reset space tracking *) 96 - | "h1" -> 97 - need_space := false; 98 - Buffer.add_string buffer "\n# "; 99 - Soup.children elem |> Soup.iter process_node; 100 - Buffer.add_string buffer "\n\n"; 101 - need_space := false 102 - | "h2" -> 103 - need_space := false; 104 - Buffer.add_string buffer "\n## "; 105 - Soup.children elem |> Soup.iter process_node; 106 - Buffer.add_string buffer "\n\n"; 107 - need_space := false 108 - | "h3" -> 109 - need_space := false; 110 - Buffer.add_string buffer "\n### "; 111 - Soup.children elem |> Soup.iter process_node; 112 - Buffer.add_string buffer "\n\n"; 113 - need_space := false 114 - | "h4" -> 115 - need_space := false; 116 - Buffer.add_string buffer "\n#### "; 117 - Soup.children elem |> Soup.iter process_node; 118 - Buffer.add_string buffer "\n\n"; 119 - need_space := false 120 - | "h5" -> 121 - need_space := false; 122 - Buffer.add_string buffer "\n##### "; 123 - Soup.children elem |> Soup.iter process_node; 124 - Buffer.add_string buffer "\n\n"; 125 - need_space := false 126 - | "h6" -> 127 - need_space := false; 128 - Buffer.add_string buffer "\n###### "; 129 - Soup.children elem |> Soup.iter process_node; 130 - Buffer.add_string buffer "\n\n"; 131 - need_space := false 131 + | "h1" -> process_header 1 elem 132 + | "h2" -> process_header 2 elem 133 + | "h3" -> process_header 3 elem 134 + | "h4" -> process_header 4 elem 135 + | "h5" -> process_header 5 elem 136 + | "h6" -> process_header 6 elem 132 137 | "p" -> 133 138 need_space := false; 134 139 Soup.children elem |> Soup.iter process_node;