aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/all-modules.scm33
-rwxr-xr-xscripts/fetch-liu-map-index.scm53
-rwxr-xr-xscripts/module-dependants.scm4
-rwxr-xr-xscripts/use2dot/gen-use.scm36
4 files changed, 94 insertions, 32 deletions
diff --git a/scripts/all-modules.scm b/scripts/all-modules.scm
new file mode 100644
index 00000000..41f35393
--- /dev/null
+++ b/scripts/all-modules.scm
@@ -0,0 +1,33 @@
+(define-module (all-modules)
+ :use-module (ice-9 regex)
+ :use-module (srfi srfi-1)
+ :use-module (ice-9 ftw)
+ :use-module (ice-9 match)
+ :export (all-modules-under-directory))
+
+(define (all-modules-under-directory dir)
+ "Returns two values, all scm files in dir, and all top
+level modules in those files"
+
+ (define re (make-regexp "\\.scm$"))
+
+ (define files '())
+
+ (ftw dir (lambda (filename statinfo flag)
+ (cond ((and (eq? flag 'regular)
+ (regexp-exec re filename))
+ => (lambda (m)
+ (set! files (cons filename files))
+ #t
+ ))
+ (else #t))))
+
+
+ (values files
+ (filter identity
+ (map (lambda (file)
+ (match (call-with-input-file file read)
+ (('define-module (module ...) _ ...)
+ module)
+ (_ #f)))
+ files))))
diff --git a/scripts/fetch-liu-map-index.scm b/scripts/fetch-liu-map-index.scm
new file mode 100755
index 00000000..eea2a63d
--- /dev/null
+++ b/scripts/fetch-liu-map-index.scm
@@ -0,0 +1,53 @@
+#!/usr/bin/guile \
+-s
+!#
+
+;;; Commentary:
+;; Bulids an index of "all" locations at LiU, and prints it as a JSON
+;; object on the form { "location name": "url-fragment", ... }. These
+;; fragments should be appended to the base "https://old.liu.se/karta/".
+;;
+;; See static/user/user-additions.js for this script in action.
+;;; Code:
+
+(use-modules (srfi srfi-1)
+ (web client)
+ (web response)
+ (ice-9 rdelim)
+ (ice-9 format)
+ (sxml gumbo)
+ (sxml match)
+ (json))
+
+(define-values (response body) (http-get "https://old.liu.se/karta/list?l=sv"))
+
+(unless (= 200 (response-code response))
+ (format #t "Fetching index failed with ~a ~a~%"
+ (response-code response)
+ (response-reason-phrase response))
+ (format #t "~{~s~%~}" (response-headers response))
+ (exit 1))
+
+(define data (html->sxml body))
+
+(define rx (make-regexp "^karta\\?"))
+
+(define links
+ (map (lambda (node)
+ (sxml-match node
+ [(a (@ (href ,href)) ,b0 ,body ...)
+ (cons href b0)]))
+ (((@ (sxml xpath) sxpath) '(// a)) data)))
+
+(define map-links (filter (lambda (pair) (regexp-exec rx (car pair)))
+ links))
+
+(define link-table (make-hash-table))
+(for-each (lambda (pair) (hash-set! link-table (string-upcase (string-trim-both (cdr pair)))
+ (car pair)))
+ map-links)
+
+(scm->json (hash-map->list (lambda (name frag)
+ `(,name . ,frag))
+ link-table))
+(newline)
diff --git a/scripts/module-dependants.scm b/scripts/module-dependants.scm
index 212a28c8..95e5bf53 100755
--- a/scripts/module-dependants.scm
+++ b/scripts/module-dependants.scm
@@ -49,7 +49,7 @@
(define (regular-file? filename)
(eq? 'regular (stat:type (cstat filename))))
-(define (filename-extension ext)
+(define (filename-extension? ext)
(let ((re (make-regexp (string-append ((@ (texinfo string-utils)
escape-special-chars)
ext "^$[]()*." #\\)
@@ -88,7 +88,7 @@
)))
)
(delete target-file
- (filter (filename-extension ".scm")
+ (filter (filename-extension? ".scm")
(filter regular-file?
(find-all-files-under module-dir)))))))
diff --git a/scripts/use2dot/gen-use.scm b/scripts/use2dot/gen-use.scm
index 02785088..6c621fdd 100755
--- a/scripts/use2dot/gen-use.scm
+++ b/scripts/use2dot/gen-use.scm
@@ -2,43 +2,19 @@
!#
(add-to-load-path (dirname (current-filename)))
+(add-to-load-path (dirname (dirname (current-filename))))
(use-modules ((scripts frisk) :select (make-frisker edge-type edge-up
edge-down))
(srfi srfi-1)
- (ice-9 ftw)
- (ice-9 regex)
- (ice-9 match)
((graphviz) :prefix gv.)
+ (all-modules)
)
(define scan (make-frisker `(default-module . (calp main))))
-(define re (make-regexp "\\.scm$"))
-
-(define lst '())
-
-(ftw "module" (lambda (filename statinfo flag)
- (cond ((and (eq? flag 'regular)
- (regexp-exec re filename))
- => (lambda (m)
- (set! lst (cons filename lst))
- #t
- ))
- (else #t))))
-
-
-
-(define files lst)
-
-(define our-modules
- (filter identity
- (map (lambda (file)
- (match (call-with-input-file file read)
- (('define-module (module ...) _ ...)
- module)
- (_ #f)))
- files)))
+(define-values (files our-modules)
+ (all-modules-under-directory "module"))
(define graph (gv.digraph "G"))
(gv.setv graph "color" "blue")
@@ -133,7 +109,7 @@
(for-each (lambda (edge)
- (let ((gv-edge (gv.edge graph
+ (let ((gv-edge (gv.edge graph
(format #f "~a" (edge-down edge))
(format #f "~a" (edge-up edge))
)))
@@ -144,7 +120,7 @@
(not (memv (car (edge-down edge)) '(vcomponent calp ))))
(gv.setv gv-edge "color" "blue"))
))
- (remove-edges '((srfi srfi-1)
+ (remove-edges '((srfi srfi-1)
(srfi srfi-9)
(srfi srfi-26)
(srfi srfi-41)