~ chicken-core (chicken-5) 7a0bdd962424622fafa829960ca72cdcf08257e8
commit 7a0bdd962424622fafa829960ca72cdcf08257e8 Author: felix <felix@call-with-current-continuation.org> AuthorDate: Mon Jun 6 12:56:20 2011 +0200 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Mon Jun 6 12:56:20 2011 +0200 removed make-egg-index and add it to maintenance repo, as suggested by sjamaan diff --git a/scripts/make-egg-index.scm b/scripts/make-egg-index.scm deleted file mode 100644 index 6d2afa8d..00000000 --- a/scripts/make-egg-index.scm +++ /dev/null @@ -1,261 +0,0 @@ -;;;; make-egg-index.scm - create index page for extension release directory - -(load-relative "tools.scm") - -(use setup-download matchable sxml-transforms data-structures irregex) - - -(define *help* #f) -(define *major-version* (##sys#fudge 41)) - -(define +link-regexp+ - (irregex '(: #\[ #\[ (submatch (* (~ #\] #\|))) #\] #\]))) - -(define +categories+ - '((lang-exts "Language extensions") - (graphics "Graphics") - (debugging "Debugging tools") - (logic "Logic programming") - (net "Networking") - (io "Input/Output") - (db "Databases") - (os "OS interface") - (ffi "Interfacing to other languages") - (web "Web programming") - (xml "XML processing") - (doc-tools "Documentation tools") - (egg-tools "Egg tools") - (math "Mathematical libraries") - (oop "Object-oriented programming") - (data "Algorithms and data-structures") - (parsing "Data formats and parsing") - (tools "Tools") - (sound "Sound") - (testing "Unit-testing") - (crypt "Cryptography") - (ui "User interface toolkits") - (code-generation "Code generation") - (macros "Macros and meta-syntax") - (misc "Miscellaneous") - (hell "Concurrency and parallelism") - (uncategorized "Uncategorized or invalid category") - (obsolete "Unsupported or redundant") ) ) - -(define (d fstr . args) - (fprintf (current-error-port) "~?~%" fstr args)) - -(define (usage code) - (print "make-egg-index.scm [--help] [--major-version=MAJOR] [DIR]") - (exit code)) - -(define (sxml->html doc) - (SRV:send-reply - (pre-post-order - doc - ;; LITERAL tag contents are used as raw HTML. - `((literal *preorder* . ,(lambda (tag . body) (map ->string body))) - ,@universal-conversion-rules)))) - -(define (make-egg-index dir) - (let ((title (sprintf "Eggs Unlimited (release branch ~a)" *major-version*)) - (eggs (gather-egg-information dir))) - (sxml->html - `((literal "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">") - (html (@ (xmlns "http://www.w3.org/1999/xhtml")) - ,(header title) - (body - ,(menu) - ,(content (prelude title) - (emit-egg-information eggs)) - ,(trailer))))))) - -(define (wiki-link path desc) - `(a (@ (href "http://wiki.call-cc.org/" ,path)) ,desc)) - -(define (menu) - `(div (@ (id "menu")) - (ul (li ,(wiki-link "" "Home")) - (li (a (@ (href "http://code.call-cc.org")) "Download")) - (li ,(wiki-link "manual/index" "Manual")) - (li ,(wiki-link "eggs" "Eggs")) - (li (a (@ (href "http://chickadee.call-cc.org")) "API Browser")) - (li (a (@ (href "http://bugs.call-cc.org")) "Bugs")) - ))) - -(define (content . body) - `(div (@ (id "content")) - ,body)) - -(define (header title) - `(head -;; (style (@ (type "text/css")) -;; ,+stylesheet+) - (link (@ (rel "stylesheet") - (type "text/css") - (href "http://wiki.call-cc.org/chicken.css"))) - (title ,title))) - -(define (prelude title) - `((h2 "Eggs Unlimited (release branch 4)") - (p (b "Last updated: " ,(seconds->string (current-seconds)))) - (p "A library of extensions for the Chicken Scheme system.") - (h2 "Installation") - (p "Just enter") - (pre " chicken-install EXTENSIONNAME\n") - (p "This will download anything needed to compile and install the library. " - "If your " (i "extension repository") " is placed at a location for which " - "you don't have write permissions, then run " (tt "chicken-install") - " with the " (tt "-sudo") " option or run it as root (not recommended).") - (p "You can obtain the repository location by running") - (pre " csi -p \"(repository-path)\"\n") - (p "If you only want to download the extension and install it later, pass the " - (tt "-retrieve") " option to " (tt "chicken-install") ":") - (pre " chicken-install -retrieve EXTENSIONNAME\n") - (p "By default the archive will be unpacked into a temporary directory (named " - (tt "EXTENSIONNAME.egg-dir") ") and the directory will be removed if the " - "installation completed successfully. To keep the extracted files add " - (tt "-keep") " to the options passed to " (tt "chicken-install") ".") - (p "For more information, enter") - (pre " chicken-install -help\n") - (p "If you would like to access the subversion repository, see the " - (a (@ (href "http://wiki.call-cc.org/eggs tutorial")) - "Egg tutorial") ".") - (p "If you are looking for 3rd party libraries used by one of the extensions, " - "check out the CHICKEN " - (a (@ (href "http://www.call-with-current-continuation.org/tarballs/") ) - "tarball repository") ".") - (h2 "List of available eggs") - (a (@ (name "category-list"))) - (h3 "Categories") - ,(category-link-list) - )) - -;; information on empty categories not available yet; link all possible categories -(define (category-link-list) - `(ul (@ (style "list-style-type: none; padding-left: 2em;")) - ,@(map - (match-lambda - ((cat catname) - `(li (a (@ (href "#" ,cat)) - ,catname)))) - +categories+))) - -(define (trailer) - `(div (@ (id "credits")) - (p "Generated with Chicken " ,(chicken-version)))) - -(define (emit-egg-information eggs) - (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 - (lambda (return) - (define (prop name def pred) - (cond ((assq name (cdr egg)) => (o (cut check pred <> name) cadr)) - (else def))) - (define (check pred x p) - (cond ((pred x) x) - (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)))) - (td ,(prop 'synopsis "unknown" string?)) - (td ,(prop 'license "unknown" name?)) - (td ,(linkify-names (prop 'author "unknown" name?))) - (td ,(linkify-names (prop 'maintainer "" name?))) - (td ,(prop 'version "" version?))))))) - -;; Names are either raw HTML, or [[user name]] denoting a wiki link. -(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) - ;; IRREGEX-FOLD is exported for SVN trunk >= r14283, delete this if - ;; installed Chicken is new enough. - (define (irregex-fold irx kons knil str . o) - (let* ((irx (irregex irx)) - (finish (if (pair? o) (car o) (lambda (i acc) acc))) - (start (if (and (pair? o) (pair? (cdr o))) (cadr o) 0)) - (end (if (and (pair? o) (pair? (cdr o)) (pair? (cddr o))) - (caddr o) - (string-length str)))) - (let lp ((i start) (acc knil)) - (if (>= i end) - (finish i acc) - (let ((m (irregex-search irx str i end))) - (if (not m) - (finish i acc) - (let* ((end (irregex-match-end-index m 0)) - (acc (kons i m acc))) - (lp end acc)))))))) - (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?)) - -(define version? - (disjoin string? number?)) - -(define (main args) - (when *help* (usage 0)) - (match args - ((dir) - (make-egg-index dir)) - (() (make-egg-index ".")) - (_ (usage 1)))) - -(main (simple-args (command-line-arguments))) -Trap