My agentic slop goes here. Not intended for anyone else!

more

Changed files
+41 -36
stack
+41 -36
stack/river/lib/markdown_converter.ml
···
need_space := has_whitespace (Buffer.contents buffer) || Buffer.length buffer > 0
in
+
(* Process header with ID/anchor handling *)
+
let process_header level elem =
+
need_space := false;
+
+
(* Check if header contains a link with an ID fragment *)
+
let link_opt = Soup.select_one "a[href]" elem in
+
let anchor_id = match link_opt with
+
| Some link ->
+
(match Soup.attribute "href" link with
+
| Some href ->
+
(* Extract fragment from URL *)
+
let uri = Uri.of_string href in
+
Uri.fragment uri
+
| None -> None)
+
| None -> None
+
in
+
+
(* Add anchor if we found an ID *)
+
(match anchor_id with
+
| Some id when id <> "" ->
+
Buffer.add_string buffer (Printf.sprintf "\n<a name=\"%s\"></a>\n" id)
+
| _ -> ());
+
+
(* Add the header marker *)
+
let marker = String.make level '#' in
+
Buffer.add_string buffer ("\n" ^ marker ^ " ");
+
+
(* Get text content, excluding link tags *)
+
let text = Soup.texts elem |> String.concat " " |> String.trim in
+
Buffer.add_string buffer text;
+
+
Buffer.add_string buffer "\n\n";
+
need_space := false
+
in
+
let rec process_node node =
match Soup.element node with
| Some elem ->
let tag = Soup.name elem in
(match tag with
(* Block elements - reset space tracking *)
-
| "h1" ->
-
need_space := false;
-
Buffer.add_string buffer "\n# ";
-
Soup.children elem |> Soup.iter process_node;
-
Buffer.add_string buffer "\n\n";
-
need_space := false
-
| "h2" ->
-
need_space := false;
-
Buffer.add_string buffer "\n## ";
-
Soup.children elem |> Soup.iter process_node;
-
Buffer.add_string buffer "\n\n";
-
need_space := false
-
| "h3" ->
-
need_space := false;
-
Buffer.add_string buffer "\n### ";
-
Soup.children elem |> Soup.iter process_node;
-
Buffer.add_string buffer "\n\n";
-
need_space := false
-
| "h4" ->
-
need_space := false;
-
Buffer.add_string buffer "\n#### ";
-
Soup.children elem |> Soup.iter process_node;
-
Buffer.add_string buffer "\n\n";
-
need_space := false
-
| "h5" ->
-
need_space := false;
-
Buffer.add_string buffer "\n##### ";
-
Soup.children elem |> Soup.iter process_node;
-
Buffer.add_string buffer "\n\n";
-
need_space := false
-
| "h6" ->
-
need_space := false;
-
Buffer.add_string buffer "\n###### ";
-
Soup.children elem |> Soup.iter process_node;
-
Buffer.add_string buffer "\n\n";
-
need_space := false
+
| "h1" -> process_header 1 elem
+
| "h2" -> process_header 2 elem
+
| "h3" -> process_header 3 elem
+
| "h4" -> process_header 4 elem
+
| "h5" -> process_header 5 elem
+
| "h6" -> process_header 6 elem
| "p" ->
need_space := false;
Soup.children elem |> Soup.iter process_node;