| 1 | #!gosh |
|---|
| 2 | (use text.html-lite) |
|---|
| 3 | (use text.tree) |
|---|
| 4 | |
|---|
| 5 | (define-module |
|---|
| 6 | text.xml-lite |
|---|
| 7 | (extend text.html-lite) |
|---|
| 8 | (define-macro (define-elements prefix . elements) |
|---|
| 9 | (define (make-scheme-name name) |
|---|
| 10 | (string->symbol (format #f "~a:~a" prefix name))) |
|---|
| 11 | (let loop ((elements elements) |
|---|
| 12 | (r '())) |
|---|
| 13 | (cond ((null? elements) `(begin ,@(reverse r))) |
|---|
| 14 | ((and (pair? (cdr elements)) (eqv? (cadr elements) :empty)) |
|---|
| 15 | (loop (cddr elements) |
|---|
| 16 | (list* `(define ,(make-scheme-name (car elements)) |
|---|
| 17 | (make-html-element ',(make-scheme-name (car elements)) :empty? #t)) |
|---|
| 18 | `(export ,(make-scheme-name (car elements))) |
|---|
| 19 | r))) |
|---|
| 20 | (else |
|---|
| 21 | (loop (cdr elements) |
|---|
| 22 | (list* `(define ,(make-scheme-name (car elements)) |
|---|
| 23 | (make-html-element ',(make-scheme-name (car elements)))) |
|---|
| 24 | `(export ,(make-scheme-name (car elements))) |
|---|
| 25 | r)))) |
|---|
| 26 | )) |
|---|
| 27 | (define-elements rdf RDF Seq Alt Bag li) |
|---|
| 28 | (define-elements rss channel items item title link description) |
|---|
| 29 | (define-elements content encoded) |
|---|
| 30 | (define-elements dc creator date title description) |
|---|
| 31 | (define-elements admin generatorAgent) |
|---|
| 32 | ) |
|---|
| 33 | (import text.xml-lite) |
|---|
| 34 | |
|---|
| 35 | (define (result stash-table) |
|---|
| 36 | (define (stash name) |
|---|
| 37 | (html-escape-string (hash-table-get stash-table name))) |
|---|
| 38 | (define (stash-raw name) |
|---|
| 39 | (hash-table-get stash-table name)) |
|---|
| 40 | (define base *server-root*) |
|---|
| 41 | |
|---|
| 42 | `(,(cgi-header :content-type "application/rss+xml; charset=UTF-8") |
|---|
| 43 | ,(rdf:RDF |
|---|
| 44 | :xmlns:rss "http://purl.org/rss/1.0/" |
|---|
| 45 | :xmlns:rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" |
|---|
| 46 | :xmlns:dc "http://purl.org/dc/elements/1.1/" |
|---|
| 47 | :xmlns:admin "http://webns.net/mvcb/" |
|---|
| 48 | :xmlns:content "http://purl.org/rss/1.0/modules/content/" |
|---|
| 49 | |
|---|
| 50 | (rss:channel |
|---|
| 51 | :rdf:about "" |
|---|
| 52 | (rss:title (html-escape-string *blog-title*)) |
|---|
| 53 | (rss:link (string-join (list base (stash 'home)) "")) |
|---|
| 54 | (rss:description "") |
|---|
| 55 | (admin:generatorAgent :rdf:resource "http://jknaoya.s311.xrea.com/bloscheme/bloscheme.cgi/?v=0") |
|---|
| 56 | (rss:items |
|---|
| 57 | (rdf:Seq |
|---|
| 58 | (map (lambda (file) |
|---|
| 59 | (rdf:li :rdf:resource (string-join (list base (stash 'home) (file 'name)) ""))) |
|---|
| 60 | (stash-raw 'files)) |
|---|
| 61 | ))) |
|---|
| 62 | (map (lambda (file) |
|---|
| 63 | (rss:item |
|---|
| 64 | :rdf:about (string-join (list base (stash 'home) (file 'name)) "") |
|---|
| 65 | |
|---|
| 66 | (rss:title (html-escape-string (file 'title))) |
|---|
| 67 | (rss:link (string-join (list base (stash 'home) (file 'name)) "")) |
|---|
| 68 | (dc:date (date->string (file 'date) "~Y-~m-~dT~H:~M:~S+09:00")) |
|---|
| 69 | (content:encoded (html-escape-string (string-join (file 'body) "\n"))) |
|---|
| 70 | |
|---|
| 71 | )) |
|---|
| 72 | (stash-raw 'files)) |
|---|
| 73 | ) ; /rdf:RDF |
|---|
| 74 | ) |
|---|
| 75 | ) |
|---|