From 836d10f154275e56c7185c1fcd6daee2027b41de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 10 Jul 2013 18:26:46 +0200 Subject: records: `recutils->alist' recognizes lines starting with a `+'. * guix/records.scm (%recutils-plus-rx): New variable. (recutils->alist): Use it to read + lines. * tests/records.scm ("recutils->alist with + lines"): New test. --- guix/records.scm | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'guix/records.scm') diff --git a/guix/records.scm b/guix/records.scm index 8dc733b8ff..d47bbf89f2 100644 --- a/guix/records.scm +++ b/guix/records.scm @@ -231,6 +231,9 @@ PORT, according to FIELDS. FIELDS must be a list of field name/getter pairs." ;; 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." @@ -244,6 +247,15 @@ 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) -- cgit v1.2.3