#lang racket/base (require racket/list racket/string "util.rkt") (provide make-empty-summary summary-inc summary-set summary-ref summary->lines html-report) (define summary-keys '(seen processed new changed unchanged ok converted removed skipped errors dry-run)) (define (make-empty-summary) (append (for/list ([k (in-list summary-keys)]) (cons k 0)) (list (cons 'error-list '())))) (define (summary-ref summary key [default 0]) (alist-ref/default summary key default)) (define (summary-set summary key value) (alist-set summary key value)) (define (summary-inc summary key [amount 1]) (summary-set summary key (+ (summary-ref summary key 0) amount))) (define (summary->lines summary) (for/list ([k (in-list summary-keys)]) (format "~a: ~a" k (summary-ref summary k 0)))) (define (html-escape s) (define x (format "~a" s)) (define y (regexp-replace* #rx"&" x "&")) (define z (regexp-replace* #rx"<" y "<")) (regexp-replace* #rx">" z ">")) (define (html-report title summary errors) (define rows (apply string-append (for/list ([k (in-list summary-keys)]) (format "
No errors were reported.
" (string-append "| File | Error |
|---|---|
| ~a | ~a |