;; info "(recutils) Comments"
(make-regexp "^#"))
+(define %recutils-plus-rx
+ (make-regexp "^\\+ ?(.*)$"))
+
(define (recutils->alist port)
"Read a recutils-style record from PORT and return it as a list of key/value
pairs. Stop upon an empty line (after consuming it) or EOF."
(reverse result))) ; end-of-record marker
((regexp-exec %recutils-comment-rx line)
(loop (read-line port) result))
+ ((regexp-exec %recutils-plus-rx line)
+ =>
+ (lambda (m)
+ (match result
+ (((field . value) rest ...)
+ (loop (read-line port)
+ `((,field . ,(string-append value "\n"
+ (match:substring m 1)))
+ ,@rest))))))
((regexp-exec %recutils-field-rx line)
=>
(lambda (match)
(list (recutils->alist p)
(recutils->alist p))))
+(test-equal "recutils->alist with + lines"
+ '(("Name" . "foo")
+ ("Description" . "1st line,\n2nd line,\n 3rd line with extra space,\n4th line without space."))
+ (recutils->alist (open-input-string "
+Name: foo
+Description: 1st line,
++ 2nd line,
++ 3rd line with extra space,
++4th line without space.")))
+
(test-equal "alist->record" '((1 2) b c)
(alist->record '(("a" . 1) ("b" . b) ("c" . c) ("a" . 2))
list