@@ -322,7 +322,7 @@ Library user can extend this generic function, add methods for types to iterate
322
322
(let ((fs (mapcar #' compile-token clause))
323
323
(phrase (parse-variable-phrase (string %listvar%))))
324
324
(lambda (stream )
325
- (check-template-variable-boundp (first phrase))
325
+ (check-template-variable-boundp (first phrase))
326
326
(multiple-value-bind (iterable error-string)
327
327
(resolve-variable-phrase phrase)
328
328
(if error-string
@@ -461,10 +461,16 @@ The {% if %} tag evaluates a variable, and if that variable is “true” (i.e.
461
461
else))
462
462
(funcall f stream )))))))))
463
463
464
- (def-delimited-tag :ifchanged :endifchanged :parsed-ifchanged )
464
+ (def-delimited-tag :ifchanged :endifchanged :semi- parsed-ifchanged )
465
465
466
- (def-token-compiler :parsed-ifchanged (%keywords% . clause)
467
- (let ((fs (mapcar #' compile-token clause))
466
+ (def-token-processor :semi-parsed-ifchanged (%keywords% . clauses) unprocessed
467
+ (multiple-value-bind (before-else after-else)
468
+ (split-if-clause clauses)
469
+ (process-tokens ` ((:parsed-ifchanged , %keywords% , before-else , after-else) ,@ unprocessed))))
470
+
471
+ (def-token-compiler :parsed-ifchanged (%keywords% then else)
472
+ (let ((fs-then (mapcar #' compile-token then))
473
+ (fs-else (mapcar #' compile-token else))
468
474
(phrases (mapcar #' parse-variable-phrase (mapcar ' string %keywords%))))
469
475
(lambda (stream )
470
476
(block <f0>
@@ -483,11 +489,16 @@ The {% if %} tag evaluates a variable, and if that variable is “true” (i.e.
483
489
(error error-string))
484
490
ret)))
485
491
phrases)))
486
- (unless (every #' equalp memory new)
487
- (dolist (f fs)
488
- (funcall f stream ))
489
- (setf (cdr (assoc :if-changed (getf *template-arguments* :forloop )))
490
- new)))))))
492
+ (if (not (every #' equalp memory new))
493
+ (progn
494
+ (dolist (f fs-then)
495
+ (funcall f stream ))
496
+ (setf (cdr (assoc :if-changed (getf *template-arguments* :forloop )))
497
+ new))
498
+ ; ; else
499
+ (dolist (f fs-else)
500
+ (funcall f stream ))
501
+ ))))))
491
502
492
503
(defun process-ifequal-args (unparsed-string)
493
504
(flet ((% (start)
0 commit comments