diff options
| author | Teddy Wing | 2023-04-21 02:10:13 +0200 | 
|---|---|---|
| committer | Teddy Wing | 2023-04-21 02:10:13 +0200 | 
| commit | 7a780424c6b54a769300dc04c8e21671240d0427 (patch) | |
| tree | 22180a6749623b06b6445ce80b5310582ed06ae2 | |
| parent | 3b2675c306686b7b132629ce1a6bc7c3bf0923cd (diff) | |
| download | xfdf-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.lisp | 32 | ||||
| -rw-r--r-- | test/xfdf.lisp | 5 | 
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]\"> | 
