Changeset 26891 in project


Ignore:
Timestamp:
06/13/12 09:24:19 (9 years ago)
Author:
Ivan Raikov
Message:

ersatz: passing all cheatsheet examples except raw

Location:
release/4/ersatz/trunk
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • release/4/ersatz/trunk/ersatz-lib.scm

    r26880 r26891  
    3131         template-std-env init-context
    3232
    33          template-environment? make-template-environment make-lexer-table keep-lexer-table
     33         keep-lexer-table lexer-trace
     34
     35         template-environment? make-template-environment make-lexer-table
    3436         tmpl-env-autoescape tmpl-env-search-path tmpl-env-filters tmpl-env-lexer-table
    3537         
     
    266268
    267269  (ImportStatement  (s string?)
    268                     (w (lambda (x) (or (not x) (string? x)))))
     270                    (w (lambda (x) (or (not x) (symbol? x)))))
    269271
    270272  (FromImportStatement (s string?)
  • release/4/ersatz/trunk/eval.scm

    r26859 r26891  
    156156                                (kwargs (kwargs-of env ctx argexprs))
    157157                                (callable (eval-expr env ctx opexpr)))
     158
    158159                            (cases tvalue callable
    159160                                   (Tfun (fn)
     
    180181                  (let ((name (ident-expr->name objexpr))
    181182                        (prop (ident-expr->name propexpr)))
    182                     (sprintf "~A.~A" name prop)))
     183                    (string->symbol (sprintf "~A.~A" name prop))))
    183184         (ApplyExpr (expr args)
    184185                    (apply-name-of expr))
     
    225226
    226227(define (eval-macro1 env ctx name args kwargs mac)
     228
    227229  (let ((caller (get-macro ctx 'caller))
    228230        (f (lambda (ctx stmts)
    229              (fold (lambda (s ctx) (eval-statement env ctx s)) ctx stmts))))
     231             (fold (lambda (s ctx)
     232                       (eval-statement env ctx s))
     233                   ctx stmts))))
    230234    (eval-macro env ctx name args kwargs mac f caller: (and caller #t))))
    231235
     
    307311                              (Tnull () (begin))
    308312                              (else (tvalue-output ctx (Tstr (->string text)))))
     313                       ctx
    309314                       ))
    310315                   ctx)))
     
    401406  (let ((macro-name  (lambda (name) (if namespace (string->symbol (sprintf "~A.~A" namespace name)) name)))
    402407        (alias-name  (lambda (name) (if select (alist-ref name select) name)))
    403         (can-import? (lambda (name) (if select (member name select) #t))))
    404 
     408        (can-import? (lambda (name) (if select (assoc name select) #t))))
    405409
    406410    (fold (lambda (code ctx)
     
    413417                           (let ((arg-names (ident-names-of def-args))
    414418                                 (kwargs (kwargs-of env ctx def-args)))
    415                              (set-macro ctx (macro-name (alias-name name))
    416                                         (make-template-macro arg-names kwargs stmts)))
     419                             (let ((full-name (macro-name (alias-name name))))
     420                               (set-macro ctx
     421                                          full-name
     422                                          (make-template-macro arg-names kwargs stmts))))
     423                           ctx
    417424                           )))
    418425                   
     
    425432                                    namespace: namespace select: select ))
    426433                                     
     434                   (ImportStatement (path namespace)
     435                    (let ((res (import-macro env ctx (statements-from-file env path)
     436                                  namespace: namespace
     437                                  select: select)))
     438                      res))
     439                   
     440
    427441                   (FromImportStatement (path select-macros)
    428442                      (let ((alias-names (alias-names-of select-macros)))
    429                         (import-macro env ctx (statements-from-file env path)
    430                                       namespace: namespace
    431                                       select: alias-names
    432                                       )
    433                         ))
     443                        (let ((res (import-macro env ctx
     444                                                 (statements-from-file env path)
     445                                                 namespace: namespace
     446                                                 select: alias-names
     447                                                 )))
     448                         
     449                          res
     450                          )))
    434451                   
    435452                   (else ctx))
  • release/4/ersatz/trunk/parser.scm

    r26880 r26891  
    2929    ((tok ln t l) (make-lexical-token (quasiquote t) ln l))
    3030    ))
     31
     32(define lexer-trace (make-parameter #f))
    3133
    3234(define keep-lexer-table (make-parameter #f))
     
    402404    (let ((lexer (lexer-make-lexer lexer-table is)))
    403405      (reset-lexer)
    404       (let ((ast (reverse (parser (lambda ()
    405                                    (let ((c (lexer-token-cache)))
    406                                      (let ((t (if (null? c) (lexer)
    407                                                   (let ((t (car c)))
    408                                                     (lexer-token-cache (cdr c))
    409                                                     t))))
    410                                     (if (lexical-token? t)
    411                                         (print "lexer: token = " (lexical-token-category t))
    412                                         (print "lexer: token = " t))
    413                                        t)))
    414                                  (make-parse-error file-path)))))
     406      (let ((ast (reverse (parser (if (not (lexer-trace))
     407
     408                                      (lambda ()
     409                                        (let ((c (lexer-token-cache)))
     410                                          (let ((t (if (null? c) (lexer)
     411                                                       (let ((t (car c)))
     412                                                         (lexer-token-cache (cdr c))
     413                                                         t))))
     414                                            t)))
     415                                     
     416                                      (lambda ()
     417                                        (let ((c (lexer-token-cache)))
     418                                          (let ((t (if (null? c) (lexer)
     419                                                       (let ((t (car c)))
     420                                                         (lexer-token-cache (cdr c))
     421                                                         t))))
     422
     423                                            (if (lexical-token? t)
     424                                                (print "lexer: token = " (lexical-token-category t))
     425                                                (print "lexer: token = " t))
     426                                         
     427                                            t))))
     428                                     
     429                                  (make-parse-error file-path)))))
    415430        ast)))
    416431
  • release/4/ersatz/trunk/runtime.scm

    r26889 r26891  
    188188
    189189(define (set-value ctx name value)
    190 
    191   (and (template-context? ctx) (symbol? name) (tvalue? value)
    192        (let ((frame-stack (tmpl-ctx-frame-stack ctx)))
    193          (if (null? frame-stack)
    194              (make-template-context (cons `((,name . ,value)) frame-stack)
    195                                     (tmpl-ctx-macro-table ctx)
    196                                     (tmpl-ctx-filter-table ctx)
    197                                     (tmpl-ctx-buffer ctx))
    198              (let ((frame (car frame-stack)))
    199                (make-template-context (cons (cons `(,name . ,value) frame) (cdr frame-stack))
    200                                       (tmpl-ctx-macro-table ctx)
    201                                       (tmpl-ctx-filter-table ctx)
    202                                       (tmpl-ctx-buffer ctx))))
    203          )))
     190  (if (and (template-context? ctx) (symbol? name) (tvalue? value))
     191   (let ((frame-stack (tmpl-ctx-frame-stack ctx)))
     192     (if (null? frame-stack)
     193         (make-template-context (cons `((,name . ,value)) frame-stack)
     194                                (tmpl-ctx-macro-table ctx)
     195                                (tmpl-ctx-filter-table ctx)
     196                                (tmpl-ctx-buffer ctx))
     197         (let ((frame (car frame-stack)))
     198           (make-template-context (cons (cons `(,name . ,value) frame) (cdr frame-stack))
     199                                  (tmpl-ctx-macro-table ctx)
     200                                  (tmpl-ctx-filter-table ctx)
     201                                  (tmpl-ctx-buffer ctx)))))
     202   (else (error 'set-value "invalid arguments" ctx name value))))
    204203
    205204
     
    404403                          (set-value ctx name (or (alist-ref name kwargs) value))))
    405404                        ctx (merge-defaults defaults kwargs)))
    406              (ctx (fold (lambda (name value ctx)
    407                           (set-value name ctx (or (alist-ref name kwargs) value)))
     405             (ctx (fold (lambda (name.value ctx)
     406                          (let ((name (car name.value))
     407                                (value (cdr name.value)))
     408                            (set-value ctx name (or (alist-ref name kwargs) value))))
    408409                        ctx defaults))
    409410             (ctx (f ctx code)))
  • release/4/ersatz/trunk/tests/tmpl/cheatsheet.tmpl

    r26889 r26891  
    77
    88{% include "header.tmpl" %}
    9 {% endblock %}
    109
    1110binop
     
    155154{{x}} {{ caller(1,2) }} {{y}}
    156155{% endmacro %}
    157 {#
    158156
    159157{% call(a,b) delay_macro("from", "to") %}
     
    179177{% endcall %}
    180178
    181 {% import "macro.tmpl" as hoge %}
    182 
    183 {{ hoge.hoge_macro(10,20) }}
    184 
    185 {% from "macro.tmpl" import hoge_macro, other_macro %}
    186 
    187 {{ hoge_macro(30,40) }}
     179{% import "macro.tmpl" as testmac %}
     180
     181{{ testmac.test_macro(10,20) }}
     182
     183{% from "macro.tmpl" import test_macro, other_macro %}
     184
     185
     186{{ test_macro(30,40) }}
    188187{{ other_macro(50,60) }}
    189188
     
    197196{% endmacro %}
    198197
    199 {% call(a,b=100) test_caller(100,200,300,class="hoge") %}
     198
     199{% call(a,b=100) test_caller(100,200,300,class="mytest") %}
    200200name={{test_caller.name}}
    201201caller={{test_caller.caller}}
     
    232232{% endif %}
    233233
     234{#
     235
    234236raw statement test
    235237===================
     
    239241this is not for loop -> {% for x in long_list %}hahaha{% endfor %}
    240242{% endraw %}
     243
     244#}
    241245
    242246autoescape test
     
    254258{% endautoescape %}
    255259
    256 
    257260obj literal
    258261===========
     
    265268person.name = {{ person.name }}
    266269
    267 enviroment variables
    268 =====================
    269 
    270 autoescape = {{jg_is_autoescape}}
    271 compiled = {{jg_is_compiled}}
    272 
    273 
    274 here is extended functions test(advanced.ml)
    275 =============================================
    276 
    277 if to_gmail and to_mail is not defined in filters field of environment,
    278 this filed will be empty.
    279 
    280 to_gmail:{{ "hoge"|to_gmail }}
    281 to_mail:{{"hoge"|to_mail(domain="exicite.com")|to_mail(domain="yahoo.com")|to_mail}}
    282 
    283 here is extension functions test(advanced.ml)
    284 ==============================================
    285 
    286 if my_ext.cmxs is not defined in extensions field of environment,
    287 this field will be empty.
    288 
    289 hash.to_md5("hoge") = {{ hash.to_md5("hoge") }}
    290 hash.to_md5("hoge") = {{ "hoge"|hash.to_md5 }}
    291 hash.to_md5("hoge") = {{ "hoge"|hash.to_md5() }}
    292 
    293 hash.to_md5("hoge", seed="aaa") = {{ hash.to_md5("hoge", seed="aaa") }}
    294 hash.to_md5("hoge", seed="aaa") = {{ "hoge"|hash.to_md5(seed="aaa") }}
    295 
    296270eval
    297271====
     
    299273{% set source = "{% set evalue = 'from eval!' %}{{evalue}}" %}
    300274{{ eval(source) }}
    301 #}
Note: See TracChangeset for help on using the changeset viewer.