anchor.diff:  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   
   (defun parse-foreach-attributes (str)
  -  (ppcre:register-groups-bind (loop-var list-var) ("{foreach\\s*(\\$[\\w\\.]*)\\s*in\\s*(\\$[\\w\\.]*)\\s*}" str)
  -    (list (parse-expression loop-var)
  -          (parse-expression list-var))))
  +  (or (ppcre:register-groups-bind (loop-var list-var) ("^{foreach\\s*([^\\s}]+)\\s*in\\s*([^\\s}]+)\\s*}$" str)
  +        (list (parse-expr-or-discard loop-var)
  +              (parse-expr-or-discard list-var))) 
  +      (discard-parse-element)))
   
   (define-mode foreach (60 :all)
     (:allowed :all)
  -  (:entry "{foreach\\s*\\$[\\w\\.]*\\s*in\\s*\\$[\\w\\.]*\\s*}(?=.*{/foreach})")
  +  (:entry "{foreach\\s+[^}]*}(?=.*{/foreach})")
     (:entry-attribute-parser parse-foreach-attributes)
     (:exit "{/foreach}"))
   
  
positive.code: (eval-when (:compile-toplevel :load-toplevel :execute)
    (defparameter *symbols-category* (make-hash-table)))
  
  
  ;;;; utils
  
  (defun parse-arguments/impl (str)
    (let ((args nil))
  
negative.code: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
  (defun print-tag-post-handler (obj)
    (or (ppcre:register-groups-bind (expr) ("^{(?:print\\s+)?([^\\s}]+)}$" (second obj))
          (list (car obj)
                (parse-expr-or-discard expr)))
        (discard-parse-element)))
  
  (define-mode print-tag (200 :all)
    (:special "{print[^}]*}"
              "{[^}]*}")
    (:post-handler print-tag-post-handler))
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;; msg
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
  (define-mode msg (30 :all)
    (:entry "{msg[^}]*}(?=.*{/msg})")
    (:entry-attribute-parser parse-arguments)
  