miniblog

Miniblog: A command-line static blog system in Common Lisp
Log | Files | Refs | README | LICENSE

rss.lxml (2148B)


      1 <rss version="2.0">
      2   <channel>
      3     <title><% @var title %></title>
      4     <link><% @var link %></link>
      5     <description><% @var description %></description>
      6     <generator>Miniblog</generator>
      7     <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
      8     <lastBuildDate>
      9       <%= (funcall (getf env :rfc-822-date-formatter) (getf env :build-date)) %>
     10     </lastBuildDate>
     11     <% @if image-url %>
     12       <image>
     13         <url><% @var image-url %></url>
     14         <title><% @var title %></title>
     15         <link><% @var link %></link>
     16       </image>
     17     <% @endif %>
     18     <% @if language %>
     19       <language><% @var language %></language>
     20     <% @endif %>
     21     <% @if copyright %>
     22       <copyright><% @var copyright %></copyright>
     23     <% @endif %>
     24     <% @if managing-editor %>
     25       <managingEditor><% @var managing-editor %></managingEditor>
     26     <% @endif %>
     27     <% @if webmaster %>
     28       <webmaster><% @var webmaster %></webmaster>
     29     <% @endif %>
     30     <% @if category %>
     31       <category><% @var category %></category>
     32     <% @endif %>
     33     <% @if posts %>
     34       <pubDate>
     35         <% (let* ((latest (first (getf env :posts))) (pub-date (funcall (getf env :rfc-822-date-formatter) (getf latest :last-updated-at)))) %>
     36           <%= pub-date %>
     37         <% ) %>
     38       </pubDate>
     39       <% (loop for post in (getf env :posts) do %>
     40         <% (destructuring-bind (&key id title content last-updated-at &allow-other-keys) post %>
     41           <item>
     42             <% (let* ((short-date (funcall (getf env :rfc-822-date-formatter) last-updated-at)) (formatted-content (funcall (getf env :content-formatter) content)) (stripped-content (funcall (getf env :content-stripper) formatted-content)) (truncated-content (str:substring 0 200 stripped-content))) %>
     43               <title><%= title %></title>
     44               <link><% @var link %>#<%= id %></link>
     45               <description><%= (if (equal stripped-content truncated-content) stripped-content (concatenate 'string truncated-content "...")) %></description>
     46               <pubDate><%= short-date %></pubDate>
     47             <% ) %>
     48           </item>
     49         <% ) %>
     50       <% ) %>
     51     <% @endif %>
     52   </channel>
     53 </rss>