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 ^ "" ^ tag_name ^ ">"
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
^ ""