wiki2html.scm added by mario-goulart on Wed Nov 11 20:37:17 2020
#!/bin/sh #| -*- scheme -*- exec csi -s $0 "$@" |# (cond-expand (chicken-4 (use qwiki utils svnwiki-sxml sxml-transforms)) (chicken-5 (import (chicken format) (chicken pathname) (chicken port) (chicken process-context) (chicken string)) (import qwiki svnwiki-sxml sxml-transforms srfi-1 srfi-13)) (else (error "Unsupported CHICKEN version."))) (define sxml->html (let ((rules `((literal *preorder* . ,(lambda (t b) b)) . ,universal-conversion-rules*))) (lambda (sxml) (with-output-to-string (lambda () (SRV:send-reply (pre-post-order* sxml rules))))))) (define (read-wiki-file file) (with-output-to-string (lambda () (write-content (call-with-input-file file svnwiki->sxml))))) (define (wiki->html file #!key title css menu) (sxml->html `((literal "<!DOCTYPE html>") (html (head (title ,(or title "CHICKEN Scheme")) (meta (@ (http-equiv "Content-Type") (content "application/xhtml+xml; charset=utf-8"))) (link (@ (rel "stylesheet") (href ,(if css css "http://wiki.call-cc.org/chicken.css")) (type "text/css"))) (link (@ (rel "icon") (href "http://call-cc.org/favicon.ico") (type "image/x-icon")))) ,(if menu `(div (@ (id "menu")) (literal ,(read-wiki-file menu))) '()) (div (@ (id "content")) (literal ,(read-wiki-file file))))))) (define (usage #!optional exit-code) (let ((port (if (and exit-code (not (zero? exit-code))) (current-error-port) (current-output-port)))) (fprintf port "~a [--css <css URI>] [--title <page title>] [--menu <menu file>] <wiki-file>\n" (pathname-strip-directory (program-name))) (when exit-code (exit exit-code)))) (let ((wiki-file #f) (css #f) (title #f) (menu-file #f)) (let loop ((args (command-line-arguments))) (if (null? args) (if wiki-file (print (wiki->html wiki-file css: css title: title menu: menu-file)) (usage 1)) (let ((arg (car args))) (cond ((or (equal? arg "-h") (equal? arg "--help")) (usage 0)) ((equal? arg "--css") (set! css (cadr args)) (loop (cddr args))) ((equal? arg "--title") (set! title (cadr args)) (loop (cddr args))) ((equal? arg "--menu") (set! menu (cadr args)) (loop (cddr args))) (else (set! wiki-file arg) (loop (cdr args))))))))