diff --git a/src/Makefile b/src/Makefile index 8f2fc3f..7834df4 100644 --- a/src/Makefile +++ b/src/Makefile @@ -39,7 +39,8 @@ HACKERBASE-DEPS=hackerbase.scm cal-month.import.scm \ mailman.import.scm texts.import.scm tests.import.scm \ notifications.import.scm logging.import.scm \ progress.import.scm cal-period.import.scm \ - util-stdout.import.scm export-web-static.import.scm + util-stdout.import.scm export-web-static.import.scm \ + dokuwiki.import.scm HACKERBASE-OBJS=hackerbase.o testing.o listing.o cal-month.o \ cal-period.o ansi.o util-dict-list.o command-line.o mbase.o \ @@ -55,7 +56,7 @@ HACKERBASE-OBJS=hackerbase.o testing.o listing.o cal-month.o \ sgr-list.o sgr-block.o table-processor.o table-border.o \ table-style.o sgr-state.o util-utf8.o sgr-cell.o \ template-list-expander.o box-drawing.o util-list.o \ - export-web-static.o util-dir.o racket-kwargs.o + export-web-static.o util-dir.o racket-kwargs.o dokuwiki.o .PHONY: imports imports: $(HACKERBASE-DEPS) @@ -482,3 +483,10 @@ UTIL-DIR-SOURCES=util-dir.scm util-dir.o: util-dir.import.scm util-dir.import.scm: $(UTIL-DIR-SOURCES) + +DOKUWIKI-SOURCES=dokuwiki.scm racket-kwargs.import.scm \ + configuration.import.scm util-parser.import.scm \ + util-csv.import.scm + +dokuwiki.o: dokuwiki.import.scm +dokuwiki.import.scm: $(DOKUWIKI-SOURCES) diff --git a/src/dokuwiki.scm b/src/dokuwiki.scm index 07deee6..dbfac7b 100644 --- a/src/dokuwiki.scm +++ b/src/dokuwiki.scm @@ -27,25 +27,44 @@ (module dokuwiki ( + dokuwiki-load-users ) (import scheme (chicken base) (chicken pathname) (chicken io) + (chicken string) racket-kwargs configuration - util-parser) + util-parser + util-csv) - ;; Parses all dokuwiki users from current-input-port + ;; Special CSV-like parser + (define auth-line-parser + (make-csv-line-parser #\: #f)) + + ;; Parses all dokuwiki users from current-input-port, returns a list + ;; of lists: username, name, email, groups (list) (define (parse-dokuwiki-users-auth) (let loop ((lines (read-lines)) (users '())) (if (null? lines) users - (let ((line (car lines))) - (loop (cdr lines) - users))))) + (let ((line (parser-preprocess-line (car lines)))) + (if (equal? line "") + (loop (cdr lines) + users) + (let* ((row (auth-line-parser line)) + (username (car row)) + (name (caddr row)) + (email (cadddr row)) + (groupstr (list-ref row 4)) + (groups (string-split groupstr ","))) + (print "u=" username " n=" name " e=" email " g=" groups) + (loop (cdr lines) + (cons (list username name email groups) + users)))))))) ;; Parses all users from given filename (define (load-dokuwiki-users-auth fname) diff --git a/src/util-csv.scm b/src/util-csv.scm index d76c0f1..8a63036 100644 --- a/src/util-csv.scm +++ b/src/util-csv.scm @@ -28,6 +28,7 @@ (module util-csv ( + make-csv-line-parser csv-parse csv-split-header csv-simple-tests!