~ chicken-core (chicken-5) 1f694f868dbc361781466c23bd67db614e128f4c
commit 1f694f868dbc361781466c23bd67db614e128f4c Author: felix <felix@call-with-current-continuation.org> AuthorDate: Mon Jun 6 12:55:14 2011 +0200 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Mon Jun 6 12:55:14 2011 +0200 applied patch by sjamaan diff --git a/scripts/make-egg-index.scm b/scripts/make-egg-index.scm index 27df8d36..6d2afa8d 100644 --- a/scripts/make-egg-index.scm +++ b/scripts/make-egg-index.scm @@ -38,7 +38,7 @@ (macros "Macros and meta-syntax") (misc "Miscellaneous") (hell "Concurrency and parallelism") - (uncategorized "Uncategorized") + (uncategorized "Uncategorized or invalid category") (obsolete "Unsupported or redundant") ) ) (define (d fstr . args) @@ -145,30 +145,36 @@ (p "Generated with Chicken " ,(chicken-version)))) (define (emit-egg-information eggs) - (append-map - (match-lambda - ((cat catname) - (let ((eggs (append-map - make-egg-entry - (sort - (filter (lambda (info) - (and (eq? cat (cadr (or (assq 'category (cdr info)) - '(#f uncategorized)))) - (not (assq 'hidden (cdr info))))) - eggs) - (lambda (e1 e2) - (string<? (symbol->string (car e1)) (symbol->string (car e2)))))))) - (if (null? eggs) - '() - (begin - (d "category: ~a" catname) - `((a (@ (name ,cat))) - (h3 (a (@ (href "#category-list")) - ,catname)) - (table - (tr (th "Name") (th "Description") (th "License") (th "Author") (th "Maintainer") (th "Version")) - ,@eggs))))))) - +categories+)) + (let ((catnames (map car +categories+))) + (append-map + (match-lambda + ((cat catname) + (let ((eggs (append-map + make-egg-entry + (sort + (filter (lambda (info) + (let* ((egg-cat (assq 'category (cdr info))) + (catname (or (and egg-cat + (memq (cadr egg-cat) + catnames) + (cadr egg-cat)) + 'uncategorized))) + (and (eq? cat catname) + (not (assq 'hidden (cdr info)))))) + eggs) + (lambda (e1 e2) + (string<? (symbol->string (car e1)) (symbol->string (car e2)))))))) + (if (null? eggs) + '() + (begin + (d "category: ~a" catname) + `((a (@ (name ,cat))) + (h3 (a (@ (href "#category-list")) + ,catname)) + (table + (tr (th "Name") (th "Description") (th "License") (th "Author") (th "Maintainer") (th "Version")) + ,@eggs))))))) + +categories+))) (define (make-egg-entry egg) (call/cc @@ -178,9 +184,10 @@ (else def))) (define (check pred x p) (cond ((pred x) x) - (else - (warning "extension has .meta entry of incorrect type and will not be listed" (car egg) p x) - (return '())))) + (else `(span (em (@ (class "meta-file-error")) + "Invalid meta-file property '" ,p "'") + " " (& "mdash") + " please contact this egg's author!")))) (d " ~a ~a" (car egg) (prop 'version "HEAD" any?)) `((tr (td (a (@ (href ,(sprintf "http://wiki.call-cc.org/eggref/~a/~a" *major-version* (car egg)))) ,(symbol->string (car egg)))) @@ -191,7 +198,7 @@ (td ,(prop 'version "" version?))))))) ;; Names are either raw HTML, or [[user name]] denoting a wiki link. -(define (linkify-names str) +(define (linkify-names sxml) ;; Call MATCHED on (sub)matches and DID-NOT-MATCH on non-matches in STR, ;; and collect into a list. (define (transform irx str matched did-not-match) @@ -210,30 +217,31 @@ (let ((m (irregex-search irx str i end))) (if (not m) (finish i acc) - (let* ((end (irregex-match-end m 0)) + (let* ((end (irregex-match-end-index m 0)) (acc (kons i m acc))) (lp end acc)))))))) - (let ((irregex-match-start-index irregex-match-start)) ;; upcoming API change in irregex 0.7 - (irregex-fold irx - (lambda (i m s) - (cons (matched (irregex-match-substring m 1)) - (cons (did-not-match - (substring str i (irregex-match-start-index m 0))) - s))) - '() - str - (lambda (i s) - (reverse (cons (did-not-match (substring str i)) - s)))))) - (transform - +link-regexp+ - str - (lambda (name) ;; wiki username - `(a (@ (href ,(string-append "http://wiki.call-cc.org/users/" - (string-substitute " " "-" name 'global)))) - ,name)) - (lambda (x) ;; raw HTML chunk - `(literal ,x)))) + (irregex-fold irx + (lambda (i m s) + (cons (matched (irregex-match-substring m 1)) + (cons (did-not-match + (substring str i (irregex-match-start-index m 0))) + s))) + '() + str + (lambda (i s) + (reverse (cons (did-not-match (substring str i)) + s))))) + (if (string? sxml) + (transform + +link-regexp+ + sxml + (lambda (name) ;; wiki username + `(a (@ (href ,(string-append "http://wiki.call-cc.org/users/" + (irregex-replace/all " " name "-")))) + ,name)) + (lambda (x) ;; raw HTML chunk + `(literal ,x))) + sxml)) (define name? (disjoin string? symbol?))Trap