diff --git a/MEMBERS.md b/MEMBERS.md index 5fee82c..43cf72f 100644 --- a/MEMBERS.md +++ b/MEMBERS.md @@ -15,15 +15,18 @@ Symlinks to the member files serve as human-readable aliases. The implementation handles situation when the human-readable name is the member file and the symlink is the four-digit member id. -Member File Preprocessing -------------------------- +Member File Parsing +------------------- Member files are read line-by-line. Comments start with the ```#``` character and continue until the end of particular line. -Comments are stripped from each line before parsing. +Comments are stripped from each line before parsing. The same applies +to leading and trailing whitespace after stripping comments. + +Each line should contain a Member File Grammar ------------------- diff --git a/Makefile b/Makefile index d7ce1fe..7f72712 100644 --- a/Makefile +++ b/Makefile @@ -44,7 +44,7 @@ BBSTOOL-DEPS=bbstool.scm testing.import.scm listing.import.scm \ utils.import.scm primes.import.scm member-record.import.scm \ configuration.import.scm progress.import.scm table.import.scm \ cards.import.scm member2-record.import.scm \ - member2-parser.import.scm + member-parser.import.scm BBSTOOL-SOURCES=bbstool.scm testing.scm listing.scm dictionary.scm \ month.scm period.scm ansi.scm member-file.scm \ @@ -206,8 +206,8 @@ member2-record.so: member2-record.o member2-record.o: member2-record.import.scm member2-record.import.scm: $(MEMBER2-RECORD-SOURCES) -MEMBER2-PARSER-SOURCES=member2-parser.scm member2-record.import.scm +MEMBER-PARSER-SOURCES=member-parser.scm member2-record.import.scm -member2-parser.so: member2-parser.o -member2-parser.o: member2-parser.import.scm -member2-parser.import.scm: $(MEMBER2-PARSER-SOURCES) +member-parser.so: member-parser.o +member-parser.o: member-parser.import.scm +member-parser.import.scm: $(MEMBER-PARSER-SOURCES) diff --git a/member2-parser.scm b/member-parser.scm similarity index 83% rename from member2-parser.scm rename to member-parser.scm index 1c48378..6237dd9 100644 --- a/member2-parser.scm +++ b/member-parser.scm @@ -1,5 +1,5 @@ ;; -;; member2-parser.scm +;; member-parser.scm ;; ;; Member file parsing. ;; @@ -23,10 +23,10 @@ ;; CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ;; -(declare (unit member2-parser)) +(declare (unit member-parser)) (module - member2-parser + member-parser ( parse-member-file member-parser-tests! @@ -98,6 +98,7 @@ (mrp (parse-member-lines mr source))) mrp)) + ;; Performs self-tests of the member-parser module. (define (member-parser-tests!) (run-tests member-parser @@ -113,11 +114,28 @@ (test-equal? preprocess-member-line (preprocess-member-line "key value # spaces and comment after spaces") "key value") + (test-false parse-member-line + (parse-member-line "")) + (test-eq? parse-member-line + (parse-member-line "key") + 'key) + (test-equal? parse-member-line + (parse-member-line "key value") + '(key . "value")) + (test-equal? parse-member-line + (parse-member-line "key value") + '(key . "value")) + (test-equal? parse-member-line + (parse-member-line "key value and some") + '(key . "value and some")) + (test-equal? parse-member-line + (parse-member-line "key value lot of spaces") + '(key . "value lot of spaces")) )) ) -(import member2-parser) +(import member-parser) (member-parser-tests!) (print (parse-member-file (make-member-record "joe" "members/joe" '())))