#! /usr/bin/guile \ -e main -s !# (use-modules (sxml simple)) ;; Loads an entire text file into a string (define (read-entire-file file) (call-with-input-file file (lambda (fp) (letrec ((read-characters (lambda (fp) (let ((character (read-char fp))) (if (eof-object? character) "" (string-append (string character) (read-characters fp))))))) (read-characters fp))))) ;; Make a link for the article (define (make-article-list-link article) (let ((title (cadr (list-ref article 0))) (name (cadr (list-ref article 2)))) (string-append "
  • " title "
  • \n"))) ;; Reads the article file and formats some stuff out (define (get-raw-article file) (letrec ((article (read-entire-file file)) (article-open (string-contains article "
    ")) (article-close (string-contains article "
    "))) (substring article (+ article-open 9) article-close))) ;; Makes a card for the article (define (make-article-card article) (let ((title (cadr (list-ref article 0))) (name (cadr (list-ref article 2))) (pub-date (cadr (list-ref article 4))) (file (cadr (list-ref article 6)))) (string-append "
    \n" "
    \n" "
    \n" "
    \n" "

    " title "

    --- " pub-date "\n" "
    \n" (get-raw-article file) "\n" "
    \n"))) ;; Generates a html blog from xml data (define (generate-html) (let ((template (read-entire-file "template.xhtml")) (article-list "\n")) (format #t template article-list article-cards))) (define (main args) (generate-html))