anchor.diff:  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   
   (defun parse-for-attributes (str)
  -  (ppcre:register-groups-bind (loop-var expr)
  -      ("{for\\s*(\\$\\w+)\\s*in\\s*(range\\(\\s*[^}]+\\s*(?:,\\s*[^}]+\\s*)?(?:,\\s*[^}]+\\s*)?\\))\\s*}" str)
  -    (list loop-var
  -          (parse-expression expr))))
  +  (or (ppcre:register-groups-bind (loop-var expr) ("{for\\s+([^\\s]+)\\s+in\\s+([^}]*)}" str)
  +        (let ((p-expr (parse-expr-or-discard expr)))
  +          (when (or (not (eql :range (car p-expr)))
  +                    (not (second p-expr))
  +                    (> (length p-expr) 4))
  +            (discard-parse-element))
  +          (list loop-var
  +                p-expr)))
  +      (discard-parse-element)))
   
   (define-mode for-expr (70 :all)
  -  (:entry "{for\\s*\\$\\w+\\s*in\\s*range\\(\\s*[^}]+\\s*(?:,\\s*[^}]+\\s*)?(?:,\\s*[^}]+\\s*)?\\)\\s*}(?=.*{/for})")
  +  (:entry "{for\\s+[^}]*}(?=.*{/for})")
     (:entry-attribute-parser parse-for-attributes)
     (:exit "{/for}"))
   
  
positive.code:                                               (1- (length (second item)))))))
  
  (define-mode namespace (10 :baseonly)
    (:special "{namespace\\s*[\\w\\.\\-]*\\s*}")
    (:post-handler namespace-post-handler))
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
negative.code:     (cons name
            (parse-arguments/impl args))))
  
  ;;;; closure template syntax
  ;;;; see http://code.google.com/intl/ru/closure/templates/docs/commands.html
  
  