let esc = Xml_print.encode_unsafe_char let header config url = let open Logarion.Meta in let open Logarion.Archive.Configuration in "" ^ config.title ^ "" (* TODO: ^ "A subtitle."*) ^ "" ^ "" ^ "urn:uuid:" ^ Id.to_string config.id ^ "" ^ "" ^ Ptime.to_rfc3339 (Ptime_clock.now ()) ^ "" let opt_element tag_name content = if content <> "" then "<" ^ tag_name ^ ">" ^ content ^ "" else "" let entry url note = let open Logarion in let meta = note.Note.meta in let u = "note/" ^ Meta.alias meta in let open Meta in let authors elt a = a ^ "" ^ (opt_element "name" @@ esc elt.Author.name) ^ (opt_element "uri" @@ esc (Uri.to_string elt.Author.address)) ^ "" in ("" ^ "" ^ meta.title ^ "" ^ "urn:uuid:" ^ Meta.Id.to_string meta.uuid ^ "" ^ "" ^ "" ^ Date.(meta.date |> listing |> rfc_string) ^ "" ^ Meta.AuthorSet.fold authors meta.authors "" ^ opt_element "summary" @@ esc meta.abstract) ^ Meta.StringSet.fold (fun elt a -> a ^ "") meta.topics "" ^ "
" ^ (Omd.to_html @@ Omd.of_string @@ esc note.Note.body) ^ "
" ^ "
" let feed config url note_fn articles = let fold_valid feed m = match note_fn m.Logarion.Meta.uuid with | Some note -> feed ^ "\n" ^ entry url note | None -> feed in "\n\n" ^ header config url ^ List.fold_left fold_valid "" articles ^ ""