From 303a12092413c157272d78657d7c4d4c3f6b27b0 Mon Sep 17 00:00:00 2001 From: Ricardo Wurmus Date: Tue, 13 Apr 2021 23:30:55 +0200 Subject: software: Generate project list with member details. * software.md: Replace this file... * software.sxml: ...with this new file. * haunt.scm (read-markdown-page): Rename this procedure... (read-page): ...to this procedure and add optional READER argument. (static-pages): Add local definition of SXML-PAGE and use it for software.sxml. --- software.sxml | 226 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 226 insertions(+) create mode 100644 software.sxml (limited to 'software.sxml') diff --git a/software.sxml b/software.sxml new file mode 100644 index 0000000..8ef1002 --- /dev/null +++ b/software.sxml @@ -0,0 +1,226 @@ +(use-modules (ice-9 match) + (srfi srfi-9) + (srfi srfi-69) + (haunt utils)) + +(define-record-type + (project id name url members) + project? + (id project-id) + (name project-name) + (url project-url) + (members project-members set-project-members!)) + +(define-record-type + (make-person name url avatar) + person? + (name person-name) + (url person-url) + (avatar person-avatar)) + +(define* (person name #:optional url avatar) + (make-person name url avatar)) + +(define %projects + (let ((table (make-hash-table))) + (for-each + (match-lambda + ((id name url) + (hash-table-set! table id (project id name url (list))))) + '((8sync + "8sync" + "https://www.gnu.org/software/8sync/") + (adns + "GNU adns" + "https://www.gnu.org/software/adns/") + (archimedes + "GNU Archimedes" + "https://www.gnu.org/software/archimedes/") + (binutils + "binutils" + "https://www.gnu.org/software/binutils/") + (classpath + "GNU Classpath" + "https://www.gnu.org/software/classpath/") + (dominion + "GNU Dominion" + "https://savannah.gnu.org/projects/dominion") + (gcc + "GNU Compiler Collection (GCC)" + "https://gcc.gnu.org") + (gdb + "GDB" "https://www.gnu.org/software/gdb/") + (glibc + "GNU C Library" + "https://www.gnu.org/software/libc/") + (gneural + "GNU Gneural Network" + "https://www.gnu.org/software/gneuralnetwork/") + (gnucobol + "GnuCOBOL" + "https://gnucobol.sourceforge.io/") + (gnupg + "GnuPG" + "https://gnupg.org") + (gsl + "GNU Scientific Library" + "https://www.gnu.org/software/gsl/") + (guile + "GNU Guile" + "https://www.gnu.org/software/guile/") + (guile-debbugs + "Guile-Debbugs" + "https://savannah.gnu.org/projects/guile-debbugs/") + (guile-gnome + "Guile-GNOME" + "https://www.gnu.org/software/guile-gnome/") + (guile-opengl + "Guile-OpenGL" + "https://www.gnu.org/software/guile-opengl/") + (guile-rpc + "GNU Guile-RPC" + "https://www.gnu.org/software/guile-rpc/") + (guix + "GNU Guix" + "https://guix.gnu.org") + (gwl + "Guix Workflow Language" + "https://guixwl.org") + (hurd + "GNU Hurd" + "https://hurd.gnu.org") + (indent + "GNU indent" + "https://www.gnu.org/software/indent/") + (libgcrypt + "GNU Libgcrypt" + "https://gnupg.org/related_software/libgcrypt/") + (libtasn1 + "GNU Libtasn1" + "https://www.gnu.org/software/libtasn1/") + (lilypond + "GNU LilyPond" + "https://lilypond.org/") + (liquid-war-6 + "Liquid War 6" + "https://www.gnu.org/software/liquidwar6/") + (mcsim + "GNU MCSim" + "https://www.gnu.org/software/mcsim/") + (mediagoblin + "GNU MediaGoblin" + "https://mediagoblin.org/") + (mes + "GNU Mes" + "https://www.gnu.org/software/mes/") + (mpc + "GNU MPC" + "http://www.multiprecision.org/mpc/") + (nano-archimedes + "GNU Nano-Archimedes" + "https://www.gnu.org/software/archimedes/") + (shepherd + "GNU Shepherd" + "https://www.gnu.org/software/shepherd/") + (source-highlight + "GNU Source Highlight" + "https://www.gnu.org/software/src-highlite/") + (userv + "GNU userv" + "https://www.gnu.org/software/userv/"))) + table)) + +(define-syntax-rule (define-member person projects ...) + (for-each (lambda (project-id) + (let ((project + (hash-table-ref %projects project-id + (lambda () + (error (format #false + "Unknown project ~a for ~a~%" + project-id name)))))) + (set-project-members! + project (cons person (project-members project))))) + (quote (projects ...)))) + +(define-member (person "Carlos O'Donell") + glibc gdb gcc binutils) +(define-member (person "Mark J. Wielaard" + "https://gnu.wildebeest.org/blog/mjw/") + classpath gcc glibc gdb) +(define-member (person "Andy Wingo" + "https://wingolog.org") + guile guile-gnome guile-opengl) +(define-member (person "Ludovic Courtès" + "https://people.bordeaux.inria.fr/lcourtes/") + guix guile shepherd guile-rpc) +(define-member (person "Frederic Y. Bois") + mcsim) +(define-member (person "Andrej Shadura") + indent) +(define-member (person "Werner Koch") + gnupg libgcrypt) +(define-member (person "Mark Galassi") + gsl dominion) +(define-member (person "Jean Michel Sellier") + archimedes nano-archimedes gneural) +(define-member (person "Christopher Webber" + "https://dustycloud.org") + 8sync mediagoblin) +(define-member (person "Ian Jackson") + adns userv) +(define-member (person "Samuel Thibault") + hurd) +(define-member (person "Jan Nieuwenhuizen") + mes lilypond) +(define-member (person "Christian Mauduit") + liquid-war-6) +(define-member (person "Nikos Mavrogiannopoulos") + libtasn1) +(define-member (person "Andreas Enge") + mpc) +(define-member (person "Han-Wen Nienhuys") + lilypond) +(define-member (person "Tobias Geerinckx-Rice") + guix) +(define-member (person "Bernard Giroud") + gnucobol) +(define-member (person "Tom Tromey") + source-highlight) +(define-member (person "Jeff Law") + gcc) +(define-member (person "David Malcolm") + gcc) +(define-member (person "Ricardo Wurmus" + "https://elephly.net") + guix gwl guile-debbugs) + + +`((title . "Software") + (author . "The GNU Assembly") + (date . ,(string->date* "2021-04-13 23:00")) + (menu . "software") + (content + ((h2 "Software") + (p "Maintainers of the following projects participate in the GNU Assembly:") + (ul (@ (class "projects")) + ,@(hash-table-fold %projects + (lambda (key project acc) + (cons `(li (span + (a (@ (class "project-url") + (href ,(project-url project))) + ,(project-name project)) + ,(let ((members (project-members project))) + `(details + (summary ,(format #false "members (~a)" + (length members))) + (ul (@ (class "members")) + ,(map (lambda (person) + `(li (@ (class "person")) + ,(let ((home-page (person-url person))) + (if home-page + `(a (@ (href ,home-page)) + ,(person-name person)) + (person-name person))))) + members)))))) + acc)) + '()))))) -- cgit v1.2.1