aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2023-04-21 02:10:13 +0200
committerTeddy Wing2023-04-21 02:10:13 +0200
commit7a780424c6b54a769300dc04c8e21671240d0427 (patch)
tree22180a6749623b06b6445ce80b5310582ed06ae2
parent3b2675c306686b7b132629ce1a6bc7c3bf0923cd (diff)
downloadxfdf-7a780424c6b54a769300dc04c8e21671240d0427.tar.bz2
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 `<value/>` line wouldn't be printed. * Needed to add a missing nested field to the test's expected value.
-rw-r--r--src/xfdf.lisp32
-rw-r--r--test/xfdf.lisp5
2 files changed, 26 insertions, 11 deletions
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~:*~}<field name=\"~A\">
+~{~A~}~v{~A~:*~}</field>
+"
+indent
+'(" ")
+name
+inner-fields
+indent
+'(" ")))
;; TODO: Put checkbox stuff here.
(let ((value (cond ((eq value t) "Yes")
diff --git a/test/xfdf.lisp b/test/xfdf.lisp
index 63416ea..9095076 100644
--- a/test/xfdf.lisp
+++ b/test/xfdf.lisp
@@ -63,6 +63,11 @@
<value>Simpson</value>
</field>
</field>
+ <field name=\"Page2[0]\">
+ <field name=\"f2_02[0]\">
+ <value>1234</value>
+ </field>
+ </field>
</field>
<field name=\"bottommostSubform[0]\">
<field name=\"Page1[0]\">