From 7a780424c6b54a769300dc04c8e21671240d0427 Mon Sep 17 00:00:00 2001
From: Teddy Wing
Date: Fri, 21 Apr 2023 02:10:13 +0200
Subject: xfdf.lisp: Get nested fields working
This now prints nested form fields correctly.
* Needed a separate string format for the container field.
* Had to use `consp`, otherwise `nil` checkbox values wouldn't be
recognised and a corresponding `` line wouldn't be printed.
* Needed to add a missing nested field to the test's expected value.
---
src/xfdf.lisp | 32 +++++++++++++++++++++-----------
1 file changed, 21 insertions(+), 11 deletions(-)
(limited to 'src')
diff --git a/src/xfdf.lisp b/src/xfdf.lisp
index 3aa88d0..2dfb493 100644
--- a/src/xfdf.lisp
+++ b/src/xfdf.lisp
@@ -38,19 +38,29 @@ list."
(let ((indent (+ 2 nesting-level)))
;; TODO: Add checkbox default values.
(format t "debug1: n'~A' : v'~A' : n'~A'~%" name value nesting-level)
- (if (listp value)
+ (if (consp value)
;; TODO: We need to do something with value
;; TODO: How to concat results from dolist?
- (format nil "~{~A~}"
- (loop for field in value
- collect
- (let ((subname (if (listp field)
- (first field)
- field))
- (subfield (if (listp field)
- (rest field)
- field)))
- (field-xfdf* subname subfield (1+ nesting-level)))))
+ (let ((inner-fields
+ (loop for field in value
+ collect
+ (let ((subname (if (listp field)
+ (first field)
+ field))
+ (subfield (if (listp field)
+ (rest field)
+ field)))
+ (field-xfdf* subname subfield (1+ nesting-level))))))
+ (format nil "~
+~v{~A~:*~}
+~{~A~}~v{~A~:*~}
+"
+indent
+'(" ")
+name
+inner-fields
+indent
+'(" ")))
;; TODO: Put checkbox stuff here.
(let ((value (cond ((eq value t) "Yes")
--
cgit v1.2.3