~ 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