src/cm/media/js/lib/yui/yui_3.10.3/build/handlebars-compiler/handlebars-compiler.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
YUI 3.10.3 (build 2fb5187)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
Copyright 2013 Yahoo! Inc. All rights reserved.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
Licensed under the BSD License.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
http://yuilibrary.com/license/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
YUI.add('handlebars-compiler', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
/*!
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
Handlebars.js - Copyright (C) 2011 Yehuda Katz
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
https://raw.github.com/wycats/handlebars.js/master/LICENSE
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
// This file contains code that will be inserted at the beginning of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
// handlebars-compiler module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
// This is necessary because the Y.Handlebars object is created in the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
// handlebars-base module, but the native Handlebars code expects to use a local
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
// Handlebars reference.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
var Handlebars = Y.Handlebars;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
/* THIS FILE IS GENERATED BY A BUILD SCRIPT - DO NOT EDIT! */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
/* Jison generated parser */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
var handlebars = (function(){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
var parser = {trace: function trace() { },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
yy: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
symbols_: {"error":2,"root":3,"program":4,"EOF":5,"simpleInverse":6,"statements":7,"statement":8,"openInverse":9,"closeBlock":10,"openBlock":11,"mustache":12,"partial":13,"CONTENT":14,"COMMENT":15,"OPEN_BLOCK":16,"inMustache":17,"CLOSE":18,"OPEN_INVERSE":19,"OPEN_ENDBLOCK":20,"path":21,"OPEN":22,"OPEN_UNESCAPED":23,"OPEN_PARTIAL":24,"partialName":25,"params":26,"hash":27,"DATA":28,"param":29,"STRING":30,"INTEGER":31,"BOOLEAN":32,"hashSegments":33,"hashSegment":34,"ID":35,"EQUALS":36,"PARTIAL_NAME":37,"pathSegments":38,"SEP":39,"$accept":0,"$end":1},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
terminals_: {2:"error",5:"EOF",14:"CONTENT",15:"COMMENT",16:"OPEN_BLOCK",18:"CLOSE",19:"OPEN_INVERSE",20:"OPEN_ENDBLOCK",22:"OPEN",23:"OPEN_UNESCAPED",24:"OPEN_PARTIAL",28:"DATA",30:"STRING",31:"INTEGER",32:"BOOLEAN",35:"ID",36:"EQUALS",37:"PARTIAL_NAME",39:"SEP"},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
productions_: [0,[3,2],[4,2],[4,3],[4,2],[4,1],[4,1],[4,0],[7,1],[7,2],[8,3],[8,3],[8,1],[8,1],[8,1],[8,1],[11,3],[9,3],[10,3],[12,3],[12,3],[13,3],[13,4],[6,2],[17,3],[17,2],[17,2],[17,1],[17,1],[26,2],[26,1],[29,1],[29,1],[29,1],[29,1],[29,1],[27,1],[33,2],[33,1],[34,3],[34,3],[34,3],[34,3],[34,3],[25,1],[21,1],[38,3],[38,1]],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
var $0 = $$.length - 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
switch (yystate) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
case 1: return $$[$0-1]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
case 2: this.$ = new yy.ProgramNode([], $$[$0]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
case 3: this.$ = new yy.ProgramNode($$[$0-2], $$[$0]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
case 4: this.$ = new yy.ProgramNode($$[$0-1], []); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
case 5: this.$ = new yy.ProgramNode($$[$0]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
case 6: this.$ = new yy.ProgramNode([], []); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
case 7: this.$ = new yy.ProgramNode([]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
case 8: this.$ = [$$[$0]]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
case 9: $$[$0-1].push($$[$0]); this.$ = $$[$0-1]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
case 10: this.$ = new yy.BlockNode($$[$0-2], $$[$0-1].inverse, $$[$0-1], $$[$0]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
case 11: this.$ = new yy.BlockNode($$[$0-2], $$[$0-1], $$[$0-1].inverse, $$[$0]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
case 12: this.$ = $$[$0]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
case 13: this.$ = $$[$0]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
case 14: this.$ = new yy.ContentNode($$[$0]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
case 15: this.$ = new yy.CommentNode($$[$0]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
case 16: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
case 17: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
case 18: this.$ = $$[$0-1]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
case 19: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
case 20: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1], true); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
case 21: this.$ = new yy.PartialNode($$[$0-1]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
case 22: this.$ = new yy.PartialNode($$[$0-2], $$[$0-1]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
case 23: 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
case 24: this.$ = [[$$[$0-2]].concat($$[$0-1]), $$[$0]]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
case 25: this.$ = [[$$[$0-1]].concat($$[$0]), null]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
case 26: this.$ = [[$$[$0-1]], $$[$0]]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
case 27: this.$ = [[$$[$0]], null]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
case 28: this.$ = [[new yy.DataNode($$[$0])], null]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
case 29: $$[$0-1].push($$[$0]); this.$ = $$[$0-1]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
case 30: this.$ = [$$[$0]]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
case 31: this.$ = $$[$0]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
case 32: this.$ = new yy.StringNode($$[$0]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
case 33: this.$ = new yy.IntegerNode($$[$0]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
case 34: this.$ = new yy.BooleanNode($$[$0]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
case 35: this.$ = new yy.DataNode($$[$0]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
case 36: this.$ = new yy.HashNode($$[$0]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
case 37: $$[$0-1].push($$[$0]); this.$ = $$[$0-1]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
case 38: this.$ = [$$[$0]]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
case 39: this.$ = [$$[$0-2], $$[$0]]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
case 40: this.$ = [$$[$0-2], new yy.StringNode($$[$0])]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
case 41: this.$ = [$$[$0-2], new yy.IntegerNode($$[$0])]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
case 42: this.$ = [$$[$0-2], new yy.BooleanNode($$[$0])]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
case 43: this.$ = [$$[$0-2], new yy.DataNode($$[$0])]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
case 44: this.$ = new yy.PartialNameNode($$[$0]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
case 45: this.$ = new yy.IdNode($$[$0]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
case 46: $$[$0-2].push($$[$0]); this.$ = $$[$0-2]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
case 47: this.$ = [$$[$0]]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
table: [{3:1,4:2,5:[2,7],6:3,7:4,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,5],22:[1,14],23:[1,15],24:[1,16]},{1:[3]},{5:[1,17]},{5:[2,6],7:18,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,19],20:[2,6],22:[1,14],23:[1,15],24:[1,16]},{5:[2,5],6:20,8:21,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,5],20:[2,5],22:[1,14],23:[1,15],24:[1,16]},{17:23,18:[1,22],21:24,28:[1,25],35:[1,27],38:26},{5:[2,8],14:[2,8],15:[2,8],16:[2,8],19:[2,8],20:[2,8],22:[2,8],23:[2,8],24:[2,8]},{4:28,6:3,7:4,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,5],20:[2,7],22:[1,14],23:[1,15],24:[1,16]},{4:29,6:3,7:4,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,5],20:[2,7],22:[1,14],23:[1,15],24:[1,16]},{5:[2,12],14:[2,12],15:[2,12],16:[2,12],19:[2,12],20:[2,12],22:[2,12],23:[2,12],24:[2,12]},{5:[2,13],14:[2,13],15:[2,13],16:[2,13],19:[2,13],20:[2,13],22:[2,13],23:[2,13],24:[2,13]},{5:[2,14],14:[2,14],15:[2,14],16:[2,14],19:[2,14],20:[2,14],22:[2,14],23:[2,14],24:[2,14]},{5:[2,15],14:[2,15],15:[2,15],16:[2,15],19:[2,15],20:[2,15],22:[2,15],23:[2,15],24:[2,15]},{17:30,21:24,28:[1,25],35:[1,27],38:26},{17:31,21:24,28:[1,25],35:[1,27],38:26},{17:32,21:24,28:[1,25],35:[1,27],38:26},{25:33,37:[1,34]},{1:[2,1]},{5:[2,2],8:21,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,19],20:[2,2],22:[1,14],23:[1,15],24:[1,16]},{17:23,21:24,28:[1,25],35:[1,27],38:26},{5:[2,4],7:35,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,19],20:[2,4],22:[1,14],23:[1,15],24:[1,16]},{5:[2,9],14:[2,9],15:[2,9],16:[2,9],19:[2,9],20:[2,9],22:[2,9],23:[2,9],24:[2,9]},{5:[2,23],14:[2,23],15:[2,23],16:[2,23],19:[2,23],20:[2,23],22:[2,23],23:[2,23],24:[2,23]},{18:[1,36]},{18:[2,27],21:41,26:37,27:38,28:[1,45],29:39,30:[1,42],31:[1,43],32:[1,44],33:40,34:46,35:[1,47],38:26},{18:[2,28]},{18:[2,45],28:[2,45],30:[2,45],31:[2,45],32:[2,45],35:[2,45],39:[1,48]},{18:[2,47],28:[2,47],30:[2,47],31:[2,47],32:[2,47],35:[2,47],39:[2,47]},{10:49,20:[1,50]},{10:51,20:[1,50]},{18:[1,52]},{18:[1,53]},{18:[1,54]},{18:[1,55],21:56,35:[1,27],38:26},{18:[2,44],35:[2,44]},{5:[2,3],8:21,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,19],20:[2,3],22:[1,14],23:[1,15],24:[1,16]},{14:[2,17],15:[2,17],16:[2,17],19:[2,17],20:[2,17],22:[2,17],23:[2,17],24:[2,17]},{18:[2,25],21:41,27:57,28:[1,45],29:58,30:[1,42],31:[1,43],32:[1,44],33:40,34:46,35:[1,47],38:26},{18:[2,26]},{18:[2,30],28:[2,30],30:[2,30],31:[2,30],32:[2,30],35:[2,30]},{18:[2,36],34:59,35:[1,60]},{18:[2,31],28:[2,31],30:[2,31],31:[2,31],32:[2,31],35:[2,31]},{18:[2,32],28:[2,32],30:[2,32],31:[2,32],32:[2,32],35:[2,32]},{18:[2,33],28:[2,33],30:[2,33],31:[2,33],32:[2,33],35:[2,33]},{18:[2,34],28:[2,34],30:[2,34],31:[2,34],32:[2,34],35:[2,34]},{18:[2,35],28:[2,35],30:[2,35],31:[2,35],32:[2,35],35:[2,35]},{18:[2,38],35:[2,38]},{18:[2,47],28:[2,47],30:[2,47],31:[2,47],32:[2,47],35:[2,47],36:[1,61],39:[2,47]},{35:[1,62]},{5:[2,10],14:[2,10],15:[2,10],16:[2,10],19:[2,10],20:[2,10],22:[2,10],23:[2,10],24:[2,10]},{21:63,35:[1,27],38:26},{5:[2,11],14:[2,11],15:[2,11],16:[2,11],19:[2,11],20:[2,11],22:[2,11],23:[2,11],24:[2,11]},{14:[2,16],15:[2,16],16:[2,16],19:[2,16],20:[2,16],22:[2,16],23:[2,16],24:[2,16]},{5:[2,19],14:[2,19],15:[2,19],16:[2,19],19:[2,19],20:[2,19],22:[2,19],23:[2,19],24:[2,19]},{5:[2,20],14:[2,20],15:[2,20],16:[2,20],19:[2,20],20:[2,20],22:[2,20],23:[2,20],24:[2,20]},{5:[2,21],14:[2,21],15:[2,21],16:[2,21],19:[2,21],20:[2,21],22:[2,21],23:[2,21],24:[2,21]},{18:[1,64]},{18:[2,24]},{18:[2,29],28:[2,29],30:[2,29],31:[2,29],32:[2,29],35:[2,29]},{18:[2,37],35:[2,37]},{36:[1,61]},{21:65,28:[1,69],30:[1,66],31:[1,67],32:[1,68],35:[1,27],38:26},{18:[2,46],28:[2,46],30:[2,46],31:[2,46],32:[2,46],35:[2,46],39:[2,46]},{18:[1,70]},{5:[2,22],14:[2,22],15:[2,22],16:[2,22],19:[2,22],20:[2,22],22:[2,22],23:[2,22],24:[2,22]},{18:[2,39],35:[2,39]},{18:[2,40],35:[2,40]},{18:[2,41],35:[2,41]},{18:[2,42],35:[2,42]},{18:[2,43],35:[2,43]},{5:[2,18],14:[2,18],15:[2,18],16:[2,18],19:[2,18],20:[2,18],22:[2,18],23:[2,18],24:[2,18]}],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
defaultActions: {17:[2,1],25:[2,28],38:[2,26],57:[2,24]},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
parseError: function parseError(str, hash) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
    throw new Error(str);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
parse: function parse(input) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
    var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
    this.lexer.setInput(input);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
    this.lexer.yy = this.yy;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
    this.yy.lexer = this.lexer;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
    this.yy.parser = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
    if (typeof this.lexer.yylloc == "undefined")
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
        this.lexer.yylloc = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
    var yyloc = this.lexer.yylloc;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
    lstack.push(yyloc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
    var ranges = this.lexer.options && this.lexer.options.ranges;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
    if (typeof this.yy.parseError === "function")
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
        this.parseError = this.yy.parseError;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
    function popStack(n) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
        stack.length = stack.length - 2 * n;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
        vstack.length = vstack.length - n;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
        lstack.length = lstack.length - n;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
    function lex() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
        var token;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
        token = self.lexer.lex() || 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
        if (typeof token !== "number") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
            token = self.symbols_[token] || token;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
        return token;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
    while (true) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
        state = stack[stack.length - 1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
        if (this.defaultActions[state]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
            action = this.defaultActions[state];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
            if (symbol === null || typeof symbol == "undefined") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
                symbol = lex();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
            action = table[state] && table[state][symbol];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
        if (typeof action === "undefined" || !action.length || !action[0]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
            var errStr = "";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
            if (!recovering) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
                expected = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
                for (p in table[state])
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
                    if (this.terminals_[p] && p > 2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
                        expected.push("'" + this.terminals_[p] + "'");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
                if (this.lexer.showPosition) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
                    errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
                    errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1?"end of input":"'" + (this.terminals_[symbol] || symbol) + "'");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
                this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
        if (action[0] instanceof Array && action.length > 1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
            throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
        switch (action[0]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
        case 1:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
            stack.push(symbol);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
            vstack.push(this.lexer.yytext);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
            lstack.push(this.lexer.yylloc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
            stack.push(action[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
            symbol = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
            if (!preErrorSymbol) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
                yyleng = this.lexer.yyleng;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
                yytext = this.lexer.yytext;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
                yylineno = this.lexer.yylineno;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
                yyloc = this.lexer.yylloc;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
                if (recovering > 0)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
                    recovering--;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
                symbol = preErrorSymbol;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
                preErrorSymbol = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
            break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
        case 2:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
            len = this.productions_[action[1]][1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
            yyval.$ = vstack[vstack.length - len];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
            yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
            if (ranges) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
                yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
            r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
            if (typeof r !== "undefined") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
                return r;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
            if (len) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
                stack = stack.slice(0, -1 * len * 2);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
                vstack = vstack.slice(0, -1 * len);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
                lstack = lstack.slice(0, -1 * len);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
            stack.push(this.productions_[action[1]][0]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
            vstack.push(yyval.$);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
            lstack.push(yyval._$);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
            stack.push(newState);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
            break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
        case 3:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
            return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
    return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
/* Jison generated lexer */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
var lexer = (function(){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
var lexer = ({EOF:1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
parseError:function parseError(str, hash) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
        if (this.yy.parser) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
            this.yy.parser.parseError(str, hash);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
            throw new Error(str);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
setInput:function (input) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
        this._input = input;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
        this._more = this._less = this.done = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
        this.yylineno = this.yyleng = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
        this.yytext = this.matched = this.match = '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
        this.conditionStack = ['INITIAL'];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
        this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
        if (this.options.ranges) this.yylloc.range = [0,0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
        this.offset = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
input:function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
        var ch = this._input[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
        this.yytext += ch;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
        this.yyleng++;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
        this.offset++;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
        this.match += ch;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
        this.matched += ch;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
        var lines = ch.match(/(?:\r\n?|\n).*/g);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
        if (lines) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
            this.yylineno++;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
            this.yylloc.last_line++;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
            this.yylloc.last_column++;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
        if (this.options.ranges) this.yylloc.range[1]++;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
        this._input = this._input.slice(1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
        return ch;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
unput:function (ch) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
        var len = ch.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
        var lines = ch.split(/(?:\r\n?|\n)/g);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
        this._input = ch + this._input;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
        this.yytext = this.yytext.substr(0, this.yytext.length-len-1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
        //this.yyleng -= len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
        this.offset -= len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
        var oldLines = this.match.split(/(?:\r\n?|\n)/g);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
        this.match = this.match.substr(0, this.match.length-1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
        this.matched = this.matched.substr(0, this.matched.length-1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
        if (lines.length-1) this.yylineno -= lines.length-1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
        var r = this.yylloc.range;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
        this.yylloc = {first_line: this.yylloc.first_line,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
          last_line: this.yylineno+1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
          first_column: this.yylloc.first_column,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
          last_column: lines ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
              (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
              this.yylloc.first_column - len
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
          };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
        if (this.options.ranges) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
            this.yylloc.range = [r[0], r[0] + this.yyleng - len];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
more:function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
        this._more = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
less:function (n) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
        this.unput(this.match.slice(n));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
pastInput:function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
        var past = this.matched.substr(0, this.matched.length - this.match.length);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, "");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
upcomingInput:function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
        var next = this.match;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
        if (next.length < 20) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
            next += this._input.substr(0, 20-next.length);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
        return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\n/g, "");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
showPosition:function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
        var pre = this.pastInput();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
        var c = new Array(pre.length + 1).join("-");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
        return pre + this.upcomingInput() + "\n" + c+"^";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
next:function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
        if (this.done) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
            return this.EOF;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
        if (!this._input) this.done = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
        var token,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
            match,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
            tempMatch,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
            index,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
            col,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
            lines;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
        if (!this._more) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
            this.yytext = '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
            this.match = '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
        var rules = this._currentRules();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
        for (var i=0;i < rules.length; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
            tempMatch = this._input.match(this.rules[rules[i]]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
                match = tempMatch;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
                index = i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
                if (!this.options.flex) break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
        if (match) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
            lines = match[0].match(/(?:\r\n?|\n).*/g);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
            if (lines) this.yylineno += lines.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
            this.yylloc = {first_line: this.yylloc.last_line,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
                           last_line: this.yylineno+1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
                           first_column: this.yylloc.last_column,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
                           last_column: lines ? lines[lines.length-1].length-lines[lines.length-1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
            this.yytext += match[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
            this.match += match[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
            this.matches = match;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
            this.yyleng = this.yytext.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
            if (this.options.ranges) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
                this.yylloc.range = [this.offset, this.offset += this.yyleng];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
            this._more = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
            this._input = this._input.slice(match[0].length);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
            this.matched += match[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
            token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
            if (this.done && this._input) this.done = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
            if (token) return token;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
            else return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
        if (this._input === "") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
            return this.EOF;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
            return this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\n'+this.showPosition(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
                    {text: "", token: null, line: this.yylineno});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
lex:function lex() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
        var r = this.next();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
        if (typeof r !== 'undefined') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
            return r;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
            return this.lex();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
begin:function begin(condition) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
        this.conditionStack.push(condition);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
popState:function popState() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
        return this.conditionStack.pop();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
_currentRules:function _currentRules() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
        return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
topState:function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
        return this.conditionStack[this.conditionStack.length-2];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
pushState:function begin(condition) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
        this.begin(condition);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
    }});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
lexer.options = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
lexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
var YYSTATE=YY_START
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
switch($avoiding_name_collisions) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
case 0: yy_.yytext = "\\"; return 14; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
case 1:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
                                   if(yy_.yytext.slice(-1) !== "\\") this.begin("mu");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
                                   if(yy_.yytext.slice(-1) === "\\") yy_.yytext = yy_.yytext.substr(0,yy_.yyleng-1), this.begin("emu");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
                                   if(yy_.yytext) return 14;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
                                 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
case 2: return 14; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
case 3:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
                                   if(yy_.yytext.slice(-1) !== "\\") this.popState();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
                                   if(yy_.yytext.slice(-1) === "\\") yy_.yytext = yy_.yytext.substr(0,yy_.yyleng-1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
                                   return 14;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
                                 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
case 4: yy_.yytext = yy_.yytext.substr(0, yy_.yyleng-4); this.popState(); return 15; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
case 5: this.begin("par"); return 24; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
case 6: return 16; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
case 7: return 20; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
case 8: return 19; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
case 9: return 19; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
case 10: return 23; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
case 11: return 23; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
case 12: this.popState(); this.begin('com'); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
case 13: yy_.yytext = yy_.yytext.substr(3,yy_.yyleng-5); this.popState(); return 15; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
case 14: return 22; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
case 15: return 36; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
case 16: return 35; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
case 17: return 35; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
case 18: return 39; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
case 19: /*ignore whitespace*/ 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
case 20: this.popState(); return 18; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
case 21: this.popState(); return 18; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
case 22: yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2).replace(/\\"/g,'"'); return 30; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
case 23: yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2).replace(/\\'/g,"'"); return 30; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
case 24: yy_.yytext = yy_.yytext.substr(1); return 28; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
case 25: return 32; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
case 26: return 32; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
case 27: return 31; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
case 28: return 35; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
case 29: yy_.yytext = yy_.yytext.substr(1, yy_.yyleng-2); return 35; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
case 30: return 'INVALID'; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
case 31: /*ignore whitespace*/ 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
case 32: this.popState(); return 37; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   486
case 33: return 5; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   487
break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
lexer.rules = [/^(?:\\\\(?=(\{\{)))/,/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|$)))/,/^(?:[\s\S]*?--\}\})/,/^(?:\{\{>)/,/^(?:\{\{#)/,/^(?:\{\{\/)/,/^(?:\{\{\^)/,/^(?:\{\{\s*else\b)/,/^(?:\{\{\{)/,/^(?:\{\{&)/,/^(?:\{\{!--)/,/^(?:\{\{![\s\S]*?\}\})/,/^(?:\{\{)/,/^(?:=)/,/^(?:\.(?=[}/ ]))/,/^(?:\.\.)/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}\}\})/,/^(?:\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@[a-zA-Z]+)/,/^(?:true(?=[}\s]))/,/^(?:false(?=[}\s]))/,/^(?:-?[0-9]+(?=[}\s]))/,/^(?:[a-zA-Z0-9_$:\-]+(?=[=}\s\/.]))/,/^(?:\[[^\]]*\])/,/^(?:.)/,/^(?:\s+)/,/^(?:[a-zA-Z0-9_$\-\/]+)/,/^(?:$)/];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
lexer.conditions = {"mu":{"rules":[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,33],"inclusive":false},"emu":{"rules":[3],"inclusive":false},"com":{"rules":[4],"inclusive":false},"par":{"rules":[31,32],"inclusive":false},"INITIAL":{"rules":[0,1,2,33],"inclusive":true}};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
return lexer;})()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
parser.lexer = lexer;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
function Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
return new Parser;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
})();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
/* THIS FILE IS GENERATED BY A BUILD SCRIPT - DO NOT EDIT! */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
Handlebars.Parser = handlebars;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
Handlebars.parse = function(input) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
  // Just return if an already-compile AST was passed in.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
  if(input.constructor === Handlebars.AST.ProgramNode) { return input; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
  Handlebars.Parser.yy = Handlebars.AST;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
  return Handlebars.Parser.parse(input);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
/* THIS FILE IS GENERATED BY A BUILD SCRIPT - DO NOT EDIT! */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
Handlebars.AST = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   513
Handlebars.AST.ProgramNode = function(statements, inverse) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   514
  this.type = "program";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
  this.statements = statements;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
  if(inverse) { this.inverse = new Handlebars.AST.ProgramNode(inverse); }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
Handlebars.AST.MustacheNode = function(rawParams, hash, unescaped) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
  this.type = "mustache";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
  this.escaped = !unescaped;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
  this.hash = hash;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
  var id = this.id = rawParams[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
  var params = this.params = rawParams.slice(1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   527
  // a mustache is an eligible helper if:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   528
  // * its id is simple (a single part, not `this` or `..`)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
  var eligibleHelper = this.eligibleHelper = id.isSimple;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   531
  // a mustache is definitely a helper if:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   532
  // * it is an eligible helper, and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   533
  // * it has at least one parameter or hash segment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
  this.isHelper = eligibleHelper && (params.length || hash);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
  // if a mustache is an eligible helper but not a definite
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   537
  // helper, it is ambiguous, and will be resolved in a later
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   538
  // pass or at runtime.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   541
Handlebars.AST.PartialNode = function(partialName, context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   542
  this.type         = "partial";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   543
  this.partialName  = partialName;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
  this.context      = context;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
Handlebars.AST.BlockNode = function(mustache, program, inverse, close) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
  var verifyMatch = function(open, close) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
    if(open.original !== close.original) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
      throw new Handlebars.Exception(open.original + " doesn't match " + close.original);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
  };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
  verifyMatch(mustache.id, close);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
  this.type = "block";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   556
  this.mustache = mustache;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
  this.program  = program;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
  this.inverse  = inverse;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
  if (this.inverse && !this.program) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
    this.isInverse = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   562
  }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   563
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   564
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   565
Handlebars.AST.ContentNode = function(string) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
  this.type = "content";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
  this.string = string;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   568
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   569
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   570
Handlebars.AST.HashNode = function(pairs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   571
  this.type = "hash";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   572
  this.pairs = pairs;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   573
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   574
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   575
Handlebars.AST.IdNode = function(parts) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   576
  this.type = "ID";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   577
  this.original = parts.join(".");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   578
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   579
  var dig = [], depth = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   580
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   581
  for(var i=0,l=parts.length; i<l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   582
    var part = parts[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   583
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   584
    if (part === ".." || part === "." || part === "this") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   585
      if (dig.length > 0) { throw new Handlebars.Exception("Invalid path: " + this.original); }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   586
      else if (part === "..") { depth++; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   587
      else { this.isScoped = true; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   588
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   589
    else { dig.push(part); }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   590
  }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   591
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   592
  this.parts    = dig;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   593
  this.string   = dig.join('.');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   594
  this.depth    = depth;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   595
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   596
  // an ID is simple if it only has one part, and that part is not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   597
  // `..` or `this`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   598
  this.isSimple = parts.length === 1 && !this.isScoped && depth === 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   599
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   600
  this.stringModeValue = this.string;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   601
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   602
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   603
Handlebars.AST.PartialNameNode = function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   604
  this.type = "PARTIAL_NAME";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   605
  this.name = name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   606
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   607
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   608
Handlebars.AST.DataNode = function(id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   609
  this.type = "DATA";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   610
  this.id = id;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   611
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   612
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   613
Handlebars.AST.StringNode = function(string) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   614
  this.type = "STRING";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   615
  this.string = string;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   616
  this.stringModeValue = string;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   617
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   618
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   619
Handlebars.AST.IntegerNode = function(integer) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   620
  this.type = "INTEGER";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   621
  this.integer = integer;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   622
  this.stringModeValue = Number(integer);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   623
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   624
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   625
Handlebars.AST.BooleanNode = function(bool) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   626
  this.type = "BOOLEAN";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   627
  this.bool = bool;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   628
  this.stringModeValue = bool === "true";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   629
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   630
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   631
Handlebars.AST.CommentNode = function(comment) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   632
  this.type = "comment";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   633
  this.comment = comment;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   634
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   635
/* THIS FILE IS GENERATED BY A BUILD SCRIPT - DO NOT EDIT! */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   636
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   637
/*jshint eqnull:true*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   638
var Compiler = Handlebars.Compiler = function() {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   639
var JavaScriptCompiler = Handlebars.JavaScriptCompiler = function() {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   640
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   641
// the foundHelper register will disambiguate helper lookup from finding a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   642
// function in a context. This is necessary for mustache compatibility, which
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   643
// requires that context functions in blocks are evaluated by blockHelperMissing,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   644
// and then proceed as if the resulting value was provided to blockHelperMissing.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   645
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   646
Compiler.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   647
  compiler: Compiler,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   648
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   649
  disassemble: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   650
    var opcodes = this.opcodes, opcode, out = [], params, param;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   651
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   652
    for (var i=0, l=opcodes.length; i<l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   653
      opcode = opcodes[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   654
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   655
      if (opcode.opcode === 'DECLARE') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   656
        out.push("DECLARE " + opcode.name + "=" + opcode.value);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   657
      } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   658
        params = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   659
        for (var j=0; j<opcode.args.length; j++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   660
          param = opcode.args[j];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   661
          if (typeof param === "string") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   662
            param = "\"" + param.replace("\n", "\\n") + "\"";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   663
          }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   664
          params.push(param);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   665
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   666
        out.push(opcode.opcode + " " + params.join(" "));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   667
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   668
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   669
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   670
    return out.join("\n");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   671
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   672
  equals: function(other) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   673
    var len = this.opcodes.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   674
    if (other.opcodes.length !== len) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   675
      return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   676
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   677
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   678
    for (var i = 0; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   679
      var opcode = this.opcodes[i],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   680
          otherOpcode = other.opcodes[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   681
      if (opcode.opcode !== otherOpcode.opcode || opcode.args.length !== otherOpcode.args.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   682
        return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   683
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   684
      for (var j = 0; j < opcode.args.length; j++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   685
        if (opcode.args[j] !== otherOpcode.args[j]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   686
          return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   687
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   688
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   689
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   690
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   691
    len = this.children.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   692
    if (other.children.length !== len) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   693
      return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   694
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   695
    for (i = 0; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   696
      if (!this.children[i].equals(other.children[i])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   697
        return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   698
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   699
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   700
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   701
    return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   702
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   703
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   704
  guid: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   705
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   706
  compile: function(program, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   707
    this.children = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   708
    this.depths = {list: []};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   709
    this.options = options;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   710
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   711
    // These changes will propagate to the other compiler components
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   712
    var knownHelpers = this.options.knownHelpers;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   713
    this.options.knownHelpers = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   714
      'helperMissing': true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   715
      'blockHelperMissing': true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   716
      'each': true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   717
      'if': true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   718
      'unless': true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   719
      'with': true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   720
      'log': true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   721
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   722
    if (knownHelpers) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   723
      for (var name in knownHelpers) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   724
        this.options.knownHelpers[name] = knownHelpers[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   725
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   726
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   727
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   728
    return this.program(program);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   729
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   730
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   731
  accept: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   732
    return this[node.type](node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   733
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   734
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   735
  program: function(program) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   736
    var statements = program.statements, statement;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   737
    this.opcodes = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   738
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   739
    for(var i=0, l=statements.length; i<l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   740
      statement = statements[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   741
      this[statement.type](statement);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   742
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   743
    this.isSimple = l === 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   744
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   745
    this.depths.list = this.depths.list.sort(function(a, b) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   746
      return a - b;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   747
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   748
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   749
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   750
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   751
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   752
  compileProgram: function(program) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   753
    var result = new this.compiler().compile(program, this.options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   754
    var guid = this.guid++, depth;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   755
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   756
    this.usePartial = this.usePartial || result.usePartial;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   757
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   758
    this.children[guid] = result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   759
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   760
    for(var i=0, l=result.depths.list.length; i<l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   761
      depth = result.depths.list[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   762
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   763
      if(depth < 2) { continue; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   764
      else { this.addDepth(depth - 1); }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   765
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   766
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   767
    return guid;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   768
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   769
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   770
  block: function(block) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   771
    var mustache = block.mustache,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   772
        program = block.program,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   773
        inverse = block.inverse;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   774
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   775
    if (program) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   776
      program = this.compileProgram(program);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   777
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   778
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   779
    if (inverse) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   780
      inverse = this.compileProgram(inverse);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   781
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   782
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   783
    var type = this.classifyMustache(mustache);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   784
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   785
    if (type === "helper") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   786
      this.helperMustache(mustache, program, inverse);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   787
    } else if (type === "simple") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   788
      this.simpleMustache(mustache);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   789
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   790
      // now that the simple mustache is resolved, we need to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   791
      // evaluate it by executing `blockHelperMissing`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   792
      this.opcode('pushProgram', program);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   793
      this.opcode('pushProgram', inverse);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   794
      this.opcode('emptyHash');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   795
      this.opcode('blockValue');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   796
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   797
      this.ambiguousMustache(mustache, program, inverse);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   798
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   799
      // now that the simple mustache is resolved, we need to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   800
      // evaluate it by executing `blockHelperMissing`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   801
      this.opcode('pushProgram', program);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   802
      this.opcode('pushProgram', inverse);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   803
      this.opcode('emptyHash');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   804
      this.opcode('ambiguousBlockValue');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   805
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   806
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   807
    this.opcode('append');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   808
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   809
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   810
  hash: function(hash) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   811
    var pairs = hash.pairs, pair, val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   812
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   813
    this.opcode('pushHash');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   814
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   815
    for(var i=0, l=pairs.length; i<l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   816
      pair = pairs[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   817
      val  = pair[1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   818
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   819
      if (this.options.stringParams) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   820
        if(val.depth) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   821
          this.addDepth(val.depth);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   822
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   823
        this.opcode('getContext', val.depth || 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   824
        this.opcode('pushStringParam', val.stringModeValue, val.type);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   825
      } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   826
        this.accept(val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   827
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   828
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   829
      this.opcode('assignToHash', pair[0]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   830
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   831
    this.opcode('popHash');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   832
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   833
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   834
  partial: function(partial) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   835
    var partialName = partial.partialName;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   836
    this.usePartial = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   837
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   838
    if(partial.context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   839
      this.ID(partial.context);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   840
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   841
      this.opcode('push', 'depth0');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   842
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   843
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   844
    this.opcode('invokePartial', partialName.name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   845
    this.opcode('append');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   846
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   847
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   848
  content: function(content) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   849
    this.opcode('appendContent', content.string);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   850
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   851
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   852
  mustache: function(mustache) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   853
    var options = this.options;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   854
    var type = this.classifyMustache(mustache);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   855
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   856
    if (type === "simple") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   857
      this.simpleMustache(mustache);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   858
    } else if (type === "helper") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   859
      this.helperMustache(mustache);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   860
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   861
      this.ambiguousMustache(mustache);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   862
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   863
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   864
    if(mustache.escaped && !options.noEscape) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   865
      this.opcode('appendEscaped');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   866
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   867
      this.opcode('append');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   868
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   869
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   870
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   871
  ambiguousMustache: function(mustache, program, inverse) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   872
    var id = mustache.id,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   873
        name = id.parts[0],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   874
        isBlock = program != null || inverse != null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   875
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   876
    this.opcode('getContext', id.depth);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   877
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   878
    this.opcode('pushProgram', program);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   879
    this.opcode('pushProgram', inverse);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   880
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   881
    this.opcode('invokeAmbiguous', name, isBlock);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   882
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   883
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   884
  simpleMustache: function(mustache) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   885
    var id = mustache.id;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   886
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   887
    if (id.type === 'DATA') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   888
      this.DATA(id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   889
    } else if (id.parts.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   890
      this.ID(id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   891
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   892
      // Simplified ID for `this`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   893
      this.addDepth(id.depth);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   894
      this.opcode('getContext', id.depth);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   895
      this.opcode('pushContext');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   896
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   897
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   898
    this.opcode('resolvePossibleLambda');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   899
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   900
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   901
  helperMustache: function(mustache, program, inverse) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   902
    var params = this.setupFullMustacheParams(mustache, program, inverse),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   903
        name = mustache.id.parts[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   904
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   905
    if (this.options.knownHelpers[name]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   906
      this.opcode('invokeKnownHelper', params.length, name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   907
    } else if (this.options.knownHelpersOnly) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   908
      throw new Error("You specified knownHelpersOnly, but used the unknown helper " + name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   909
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   910
      this.opcode('invokeHelper', params.length, name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   911
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   912
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   913
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   914
  ID: function(id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   915
    this.addDepth(id.depth);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   916
    this.opcode('getContext', id.depth);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   917
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   918
    var name = id.parts[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   919
    if (!name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   920
      this.opcode('pushContext');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   921
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   922
      this.opcode('lookupOnContext', id.parts[0]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   923
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   924
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   925
    for(var i=1, l=id.parts.length; i<l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   926
      this.opcode('lookup', id.parts[i]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   927
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   928
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   929
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   930
  DATA: function(data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   931
    this.options.data = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   932
    this.opcode('lookupData', data.id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   933
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   934
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   935
  STRING: function(string) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   936
    this.opcode('pushString', string.string);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   937
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   938
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   939
  INTEGER: function(integer) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   940
    this.opcode('pushLiteral', integer.integer);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   941
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   942
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   943
  BOOLEAN: function(bool) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   944
    this.opcode('pushLiteral', bool.bool);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   945
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   946
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   947
  comment: function() {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   948
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   949
  // HELPERS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   950
  opcode: function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   951
    this.opcodes.push({ opcode: name, args: [].slice.call(arguments, 1) });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   952
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   953
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   954
  declare: function(name, value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   955
    this.opcodes.push({ opcode: 'DECLARE', name: name, value: value });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   956
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   957
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   958
  addDepth: function(depth) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   959
    if(isNaN(depth)) { throw new Error("EWOT"); }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   960
    if(depth === 0) { return; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   961
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   962
    if(!this.depths[depth]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   963
      this.depths[depth] = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   964
      this.depths.list.push(depth);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   965
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   966
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   967
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   968
  classifyMustache: function(mustache) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   969
    var isHelper   = mustache.isHelper;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   970
    var isEligible = mustache.eligibleHelper;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   971
    var options    = this.options;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   972
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   973
    // if ambiguous, we can possibly resolve the ambiguity now
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   974
    if (isEligible && !isHelper) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   975
      var name = mustache.id.parts[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   976
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   977
      if (options.knownHelpers[name]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   978
        isHelper = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   979
      } else if (options.knownHelpersOnly) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   980
        isEligible = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   981
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   982
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   983
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   984
    if (isHelper) { return "helper"; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   985
    else if (isEligible) { return "ambiguous"; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   986
    else { return "simple"; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   987
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   988
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   989
  pushParams: function(params) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   990
    var i = params.length, param;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   991
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   992
    while(i--) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   993
      param = params[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   994
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   995
      if(this.options.stringParams) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   996
        if(param.depth) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   997
          this.addDepth(param.depth);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   998
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   999
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1000
        this.opcode('getContext', param.depth || 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1001
        this.opcode('pushStringParam', param.stringModeValue, param.type);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1002
      } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1003
        this[param.type](param);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1004
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1005
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1006
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1007
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1008
  setupMustacheParams: function(mustache) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1009
    var params = mustache.params;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1010
    this.pushParams(params);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1011
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1012
    if(mustache.hash) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1013
      this.hash(mustache.hash);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1014
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1015
      this.opcode('emptyHash');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1016
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1017
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1018
    return params;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1019
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1020
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1021
  // this will replace setupMustacheParams when we're done
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1022
  setupFullMustacheParams: function(mustache, program, inverse) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1023
    var params = mustache.params;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1024
    this.pushParams(params);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1025
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1026
    this.opcode('pushProgram', program);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1027
    this.opcode('pushProgram', inverse);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1028
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1029
    if(mustache.hash) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1030
      this.hash(mustache.hash);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1031
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1032
      this.opcode('emptyHash');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1033
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1034
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1035
    return params;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1036
  }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1037
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1038
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1039
var Literal = function(value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1040
  this.value = value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1041
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1042
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1043
JavaScriptCompiler.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1044
  // PUBLIC API: You can override these methods in a subclass to provide
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1045
  // alternative compiled forms for name lookup and buffering semantics
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1046
  nameLookup: function(parent, name /* , type*/) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1047
    if (/^[0-9]+$/.test(name)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1048
      return parent + "[" + name + "]";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1049
    } else if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1050
      return parent + "." + name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1051
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1052
    else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1053
      return parent + "['" + name + "']";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1054
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1055
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1056
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1057
  appendToBuffer: function(string) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1058
    if (this.environment.isSimple) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1059
      return "return " + string + ";";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1060
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1061
      return {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1062
        appendToBuffer: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1063
        content: string,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1064
        toString: function() { return "buffer += " + string + ";"; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1065
      };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1066
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1067
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1068
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1069
  initializeBuffer: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1070
    return this.quotedString("");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1071
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1072
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1073
  namespace: "Handlebars",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1074
  // END PUBLIC API
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1075
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1076
  compile: function(environment, options, context, asObject) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1077
    this.environment = environment;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1078
    this.options = options || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1079
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1080
    Handlebars.log(Handlebars.logger.DEBUG, this.environment.disassemble() + "\n\n");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1081
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1082
    this.name = this.environment.name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1083
    this.isChild = !!context;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1084
    this.context = context || {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1085
      programs: [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1086
      environments: [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1087
      aliases: { }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1088
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1089
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1090
    this.preamble();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1091
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1092
    this.stackSlot = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1093
    this.stackVars = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1094
    this.registers = { list: [] };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1095
    this.compileStack = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1096
    this.inlineStack = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1097
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1098
    this.compileChildren(environment, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1099
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1100
    var opcodes = environment.opcodes, opcode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1101
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1102
    this.i = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1103
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1104
    for(l=opcodes.length; this.i<l; this.i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1105
      opcode = opcodes[this.i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1106
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1107
      if(opcode.opcode === 'DECLARE') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1108
        this[opcode.name] = opcode.value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1109
      } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1110
        this[opcode.opcode].apply(this, opcode.args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1111
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1112
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1113
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1114
    return this.createFunctionContext(asObject);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1115
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1116
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1117
  nextOpcode: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1118
    var opcodes = this.environment.opcodes;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1119
    return opcodes[this.i + 1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1120
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1121
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1122
  eat: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1123
    this.i = this.i + 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1124
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1125
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1126
  preamble: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1127
    var out = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1128
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1129
    if (!this.isChild) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1130
      var namespace = this.namespace;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1131
      var copies = "helpers = helpers || " + namespace + ".helpers;";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1132
      if (this.environment.usePartial) { copies = copies + " partials = partials || " + namespace + ".partials;"; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1133
      if (this.options.data) { copies = copies + " data = data || {};"; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1134
      out.push(copies);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1135
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1136
      out.push('');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1137
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1138
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1139
    if (!this.environment.isSimple) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1140
      out.push(", buffer = " + this.initializeBuffer());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1141
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1142
      out.push("");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1143
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1144
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1145
    // track the last context pushed into place to allow skipping the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1146
    // getContext opcode when it would be a noop
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1147
    this.lastContext = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1148
    this.source = out;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1149
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1150
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1151
  createFunctionContext: function(asObject) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1152
    var locals = this.stackVars.concat(this.registers.list);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1153
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1154
    if(locals.length > 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1155
      this.source[1] = this.source[1] + ", " + locals.join(", ");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1156
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1157
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1158
    // Generate minimizer alias mappings
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1159
    if (!this.isChild) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1160
      for (var alias in this.context.aliases) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1161
        this.source[1] = this.source[1] + ', ' + alias + '=' + this.context.aliases[alias];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1162
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1163
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1164
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1165
    if (this.source[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1166
      this.source[1] = "var " + this.source[1].substring(2) + ";";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1167
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1168
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1169
    // Merge children
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1170
    if (!this.isChild) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1171
      this.source[1] += '\n' + this.context.programs.join('\n') + '\n';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1172
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1173
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1174
    if (!this.environment.isSimple) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1175
      this.source.push("return buffer;");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1176
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1177
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1178
    var params = this.isChild ? ["depth0", "data"] : ["Handlebars", "depth0", "helpers", "partials", "data"];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1179
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1180
    for(var i=0, l=this.environment.depths.list.length; i<l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1181
      params.push("depth" + this.environment.depths.list[i]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1182
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1183
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1184
    // Perform a second pass over the output to merge content when possible
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1185
    var source = this.mergeSource();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1186
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1187
    if (!this.isChild) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1188
      var revision = Handlebars.COMPILER_REVISION,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1189
          versions = Handlebars.REVISION_CHANGES[revision];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1190
      source = "this.compilerInfo = ["+revision+",'"+versions+"'];\n"+source;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1191
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1192
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1193
    if (asObject) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1194
      params.push(source);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1195
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1196
      return Function.apply(this, params);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1197
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1198
      var functionSource = 'function ' + (this.name || '') + '(' + params.join(',') + ') {\n  ' + source + '}';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1199
      Handlebars.log(Handlebars.logger.DEBUG, functionSource + "\n\n");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1200
      return functionSource;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1201
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1202
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1203
  mergeSource: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1204
    // WARN: We are not handling the case where buffer is still populated as the source should
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1205
    // not have buffer append operations as their final action.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1206
    var source = '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1207
        buffer;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1208
    for (var i = 0, len = this.source.length; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1209
      var line = this.source[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1210
      if (line.appendToBuffer) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1211
        if (buffer) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1212
          buffer = buffer + '\n    + ' + line.content;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1213
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1214
          buffer = line.content;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1215
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1216
      } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1217
        if (buffer) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1218
          source += 'buffer += ' + buffer + ';\n  ';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1219
          buffer = undefined;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1220
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1221
        source += line + '\n  ';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1222
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1223
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1224
    return source;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1225
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1226
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1227
  // [blockValue]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1228
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1229
  // On stack, before: hash, inverse, program, value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1230
  // On stack, after: return value of blockHelperMissing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1231
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1232
  // The purpose of this opcode is to take a block of the form
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1233
  // `{{#foo}}...{{/foo}}`, resolve the value of `foo`, and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1234
  // replace it on the stack with the result of properly
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1235
  // invoking blockHelperMissing.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1236
  blockValue: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1237
    this.context.aliases.blockHelperMissing = 'helpers.blockHelperMissing';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1238
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1239
    var params = ["depth0"];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1240
    this.setupParams(0, params);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1241
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1242
    this.replaceStack(function(current) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1243
      params.splice(1, 0, current);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1244
      return "blockHelperMissing.call(" + params.join(", ") + ")";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1245
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1246
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1247
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1248
  // [ambiguousBlockValue]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1249
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1250
  // On stack, before: hash, inverse, program, value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1251
  // Compiler value, before: lastHelper=value of last found helper, if any
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1252
  // On stack, after, if no lastHelper: same as [blockValue]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1253
  // On stack, after, if lastHelper: value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1254
  ambiguousBlockValue: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1255
    this.context.aliases.blockHelperMissing = 'helpers.blockHelperMissing';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1256
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1257
    var params = ["depth0"];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1258
    this.setupParams(0, params);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1259
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1260
    var current = this.topStack();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1261
    params.splice(1, 0, current);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1262
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1263
    // Use the options value generated from the invocation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1264
    params[params.length-1] = 'options';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1265
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1266
    this.source.push("if (!" + this.lastHelper + ") { " + current + " = blockHelperMissing.call(" + params.join(", ") + "); }");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1267
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1268
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1269
  // [appendContent]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1270
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1271
  // On stack, before: ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1272
  // On stack, after: ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1273
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1274
  // Appends the string value of `content` to the current buffer
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1275
  appendContent: function(content) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1276
    this.source.push(this.appendToBuffer(this.quotedString(content)));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1277
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1278
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1279
  // [append]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1280
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1281
  // On stack, before: value, ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1282
  // On stack, after: ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1283
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1284
  // Coerces `value` to a String and appends it to the current buffer.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1285
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1286
  // If `value` is truthy, or 0, it is coerced into a string and appended
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1287
  // Otherwise, the empty string is appended
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1288
  append: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1289
    // Force anything that is inlined onto the stack so we don't have duplication
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1290
    // when we examine local
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1291
    this.flushInline();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1292
    var local = this.popStack();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1293
    this.source.push("if(" + local + " || " + local + " === 0) { " + this.appendToBuffer(local) + " }");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1294
    if (this.environment.isSimple) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1295
      this.source.push("else { " + this.appendToBuffer("''") + " }");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1296
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1297
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1298
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1299
  // [appendEscaped]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1300
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1301
  // On stack, before: value, ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1302
  // On stack, after: ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1303
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1304
  // Escape `value` and append it to the buffer
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1305
  appendEscaped: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1306
    this.context.aliases.escapeExpression = 'this.escapeExpression';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1307
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1308
    this.source.push(this.appendToBuffer("escapeExpression(" + this.popStack() + ")"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1309
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1310
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1311
  // [getContext]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1312
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1313
  // On stack, before: ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1314
  // On stack, after: ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1315
  // Compiler value, after: lastContext=depth
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1316
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1317
  // Set the value of the `lastContext` compiler value to the depth
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1318
  getContext: function(depth) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1319
    if(this.lastContext !== depth) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1320
      this.lastContext = depth;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1321
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1322
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1323
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1324
  // [lookupOnContext]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1325
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1326
  // On stack, before: ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1327
  // On stack, after: currentContext[name], ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1328
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1329
  // Looks up the value of `name` on the current context and pushes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1330
  // it onto the stack.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1331
  lookupOnContext: function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1332
    this.push(this.nameLookup('depth' + this.lastContext, name, 'context'));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1333
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1334
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1335
  // [pushContext]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1336
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1337
  // On stack, before: ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1338
  // On stack, after: currentContext, ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1339
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1340
  // Pushes the value of the current context onto the stack.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1341
  pushContext: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1342
    this.pushStackLiteral('depth' + this.lastContext);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1343
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1344
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1345
  // [resolvePossibleLambda]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1346
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1347
  // On stack, before: value, ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1348
  // On stack, after: resolved value, ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1349
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1350
  // If the `value` is a lambda, replace it on the stack by
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1351
  // the return value of the lambda
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1352
  resolvePossibleLambda: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1353
    this.context.aliases.functionType = '"function"';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1354
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1355
    this.replaceStack(function(current) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1356
      return "typeof " + current + " === functionType ? " + current + ".apply(depth0) : " + current;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1357
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1358
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1359
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1360
  // [lookup]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1361
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1362
  // On stack, before: value, ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1363
  // On stack, after: value[name], ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1364
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1365
  // Replace the value on the stack with the result of looking
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1366
  // up `name` on `value`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1367
  lookup: function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1368
    this.replaceStack(function(current) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1369
      return current + " == null || " + current + " === false ? " + current + " : " + this.nameLookup(current, name, 'context');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1370
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1371
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1372
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1373
  // [lookupData]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1374
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1375
  // On stack, before: ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1376
  // On stack, after: data[id], ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1377
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1378
  // Push the result of looking up `id` on the current data
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1379
  lookupData: function(id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1380
    this.push(this.nameLookup('data', id, 'data'));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1381
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1382
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1383
  // [pushStringParam]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1384
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1385
  // On stack, before: ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1386
  // On stack, after: string, currentContext, ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1387
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1388
  // This opcode is designed for use in string mode, which
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1389
  // provides the string value of a parameter along with its
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1390
  // depth rather than resolving it immediately.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1391
  pushStringParam: function(string, type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1392
    this.pushStackLiteral('depth' + this.lastContext);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1393
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1394
    this.pushString(type);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1395
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1396
    if (typeof string === 'string') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1397
      this.pushString(string);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1398
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1399
      this.pushStackLiteral(string);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1400
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1401
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1402
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1403
  emptyHash: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1404
    this.pushStackLiteral('{}');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1405
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1406
    if (this.options.stringParams) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1407
      this.register('hashTypes', '{}');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1408
      this.register('hashContexts', '{}');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1409
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1410
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1411
  pushHash: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1412
    this.hash = {values: [], types: [], contexts: []};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1413
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1414
  popHash: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1415
    var hash = this.hash;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1416
    this.hash = undefined;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1417
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1418
    if (this.options.stringParams) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1419
      this.register('hashContexts', '{' + hash.contexts.join(',') + '}');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1420
      this.register('hashTypes', '{' + hash.types.join(',') + '}');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1421
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1422
    this.push('{\n    ' + hash.values.join(',\n    ') + '\n  }');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1423
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1424
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1425
  // [pushString]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1426
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1427
  // On stack, before: ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1428
  // On stack, after: quotedString(string), ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1429
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1430
  // Push a quoted version of `string` onto the stack
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1431
  pushString: function(string) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1432
    this.pushStackLiteral(this.quotedString(string));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1433
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1434
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1435
  // [push]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1436
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1437
  // On stack, before: ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1438
  // On stack, after: expr, ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1439
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1440
  // Push an expression onto the stack
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1441
  push: function(expr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1442
    this.inlineStack.push(expr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1443
    return expr;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1444
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1445
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1446
  // [pushLiteral]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1447
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1448
  // On stack, before: ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1449
  // On stack, after: value, ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1450
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1451
  // Pushes a value onto the stack. This operation prevents
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1452
  // the compiler from creating a temporary variable to hold
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1453
  // it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1454
  pushLiteral: function(value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1455
    this.pushStackLiteral(value);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1456
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1457
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1458
  // [pushProgram]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1459
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1460
  // On stack, before: ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1461
  // On stack, after: program(guid), ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1462
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1463
  // Push a program expression onto the stack. This takes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1464
  // a compile-time guid and converts it into a runtime-accessible
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1465
  // expression.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1466
  pushProgram: function(guid) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1467
    if (guid != null) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1468
      this.pushStackLiteral(this.programExpression(guid));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1469
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1470
      this.pushStackLiteral(null);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1471
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1472
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1473
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1474
  // [invokeHelper]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1475
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1476
  // On stack, before: hash, inverse, program, params..., ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1477
  // On stack, after: result of helper invocation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1478
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1479
  // Pops off the helper's parameters, invokes the helper,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1480
  // and pushes the helper's return value onto the stack.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1481
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1482
  // If the helper is not found, `helperMissing` is called.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1483
  invokeHelper: function(paramSize, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1484
    this.context.aliases.helperMissing = 'helpers.helperMissing';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1485
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1486
    var helper = this.lastHelper = this.setupHelper(paramSize, name, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1487
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1488
    this.push(helper.name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1489
    this.replaceStack(function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1490
      return name + ' ? ' + name + '.call(' +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1491
          helper.callParams + ") " + ": helperMissing.call(" +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1492
          helper.helperMissingParams + ")";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1493
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1494
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1495
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1496
  // [invokeKnownHelper]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1497
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1498
  // On stack, before: hash, inverse, program, params..., ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1499
  // On stack, after: result of helper invocation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1500
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1501
  // This operation is used when the helper is known to exist,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1502
  // so a `helperMissing` fallback is not required.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1503
  invokeKnownHelper: function(paramSize, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1504
    var helper = this.setupHelper(paramSize, name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1505
    this.push(helper.name + ".call(" + helper.callParams + ")");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1506
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1507
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1508
  // [invokeAmbiguous]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1509
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1510
  // On stack, before: hash, inverse, program, params..., ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1511
  // On stack, after: result of disambiguation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1512
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1513
  // This operation is used when an expression like `{{foo}}`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1514
  // is provided, but we don't know at compile-time whether it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1515
  // is a helper or a path.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1516
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1517
  // This operation emits more code than the other options,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1518
  // and can be avoided by passing the `knownHelpers` and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1519
  // `knownHelpersOnly` flags at compile-time.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1520
  invokeAmbiguous: function(name, helperCall) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1521
    this.context.aliases.functionType = '"function"';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1522
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1523
    this.pushStackLiteral('{}');    // Hash value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1524
    var helper = this.setupHelper(0, name, helperCall);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1526
    var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1527
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1528
    var nonHelper = this.nameLookup('depth' + this.lastContext, name, 'context');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1529
    var nextStack = this.nextStack();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1530
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1531
    this.source.push('if (' + nextStack + ' = ' + helperName + ') { ' + nextStack + ' = ' + nextStack + '.call(' + helper.callParams + '); }');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1532
    this.source.push('else { ' + nextStack + ' = ' + nonHelper + '; ' + nextStack + ' = typeof ' + nextStack + ' === functionType ? ' + nextStack + '.apply(depth0) : ' + nextStack + '; }');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1533
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1534
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1535
  // [invokePartial]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1536
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1537
  // On stack, before: context, ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1538
  // On stack after: result of partial invocation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1539
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1540
  // This operation pops off a context, invokes a partial with that context,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1541
  // and pushes the result of the invocation back.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1542
  invokePartial: function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1543
    var params = [this.nameLookup('partials', name, 'partial'), "'" + name + "'", this.popStack(), "helpers", "partials"];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1544
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1545
    if (this.options.data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1546
      params.push("data");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1547
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1548
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1549
    this.context.aliases.self = "this";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1550
    this.push("self.invokePartial(" + params.join(", ") + ")");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1551
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1552
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1553
  // [assignToHash]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1554
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1555
  // On stack, before: value, hash, ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1556
  // On stack, after: hash, ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1557
  //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1558
  // Pops a value and hash off the stack, assigns `hash[key] = value`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1559
  // and pushes the hash back onto the stack.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1560
  assignToHash: function(key) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1561
    var value = this.popStack(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1562
        context,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1563
        type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1564
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1565
    if (this.options.stringParams) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1566
      type = this.popStack();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1567
      context = this.popStack();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1568
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1569
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1570
    var hash = this.hash;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1571
    if (context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1572
      hash.contexts.push("'" + key + "': " + context);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1573
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1574
    if (type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1575
      hash.types.push("'" + key + "': " + type);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1576
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1577
    hash.values.push("'" + key + "': (" + value + ")");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1578
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1579
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1580
  // HELPERS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1581
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1582
  compiler: JavaScriptCompiler,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1583
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1584
  compileChildren: function(environment, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1585
    var children = environment.children, child, compiler;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1586
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1587
    for(var i=0, l=children.length; i<l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1588
      child = children[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1589
      compiler = new this.compiler();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1590
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1591
      var index = this.matchExistingProgram(child);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1592
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1593
      if (index == null) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1594
        this.context.programs.push('');     // Placeholder to prevent name conflicts for nested children
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1595
        index = this.context.programs.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1596
        child.index = index;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1597
        child.name = 'program' + index;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1598
        this.context.programs[index] = compiler.compile(child, options, this.context);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1599
        this.context.environments[index] = child;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1600
      } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1601
        child.index = index;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1602
        child.name = 'program' + index;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1603
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1604
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1605
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1606
  matchExistingProgram: function(child) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1607
    for (var i = 0, len = this.context.environments.length; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1608
      var environment = this.context.environments[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1609
      if (environment && environment.equals(child)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1610
        return i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1611
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1612
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1613
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1614
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1615
  programExpression: function(guid) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1616
    this.context.aliases.self = "this";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1617
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1618
    if(guid == null) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1619
      return "self.noop";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1620
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1621
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1622
    var child = this.environment.children[guid],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1623
        depths = child.depths.list, depth;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1624
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1625
    var programParams = [child.index, child.name, "data"];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1626
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1627
    for(var i=0, l = depths.length; i<l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1628
      depth = depths[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1629
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1630
      if(depth === 1) { programParams.push("depth0"); }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1631
      else { programParams.push("depth" + (depth - 1)); }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1632
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1633
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1634
    return (depths.length === 0 ? "self.program(" : "self.programWithDepth(") + programParams.join(", ") + ")";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1635
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1636
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1637
  register: function(name, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1638
    this.useRegister(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1639
    this.source.push(name + " = " + val + ";");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1640
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1641
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1642
  useRegister: function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1643
    if(!this.registers[name]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1644
      this.registers[name] = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1645
      this.registers.list.push(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1646
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1647
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1648
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1649
  pushStackLiteral: function(item) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1650
    return this.push(new Literal(item));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1651
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1652
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1653
  pushStack: function(item) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1654
    this.flushInline();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1655
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1656
    var stack = this.incrStack();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1657
    if (item) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1658
      this.source.push(stack + " = " + item + ";");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1659
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1660
    this.compileStack.push(stack);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1661
    return stack;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1662
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1663
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1664
  replaceStack: function(callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1665
    var prefix = '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1666
        inline = this.isInline(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1667
        stack;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1668
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1669
    // If we are currently inline then we want to merge the inline statement into the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1670
    // replacement statement via ','
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1671
    if (inline) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1672
      var top = this.popStack(true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1673
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1674
      if (top instanceof Literal) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1675
        // Literals do not need to be inlined
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1676
        stack = top.value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1677
      } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1678
        // Get or create the current stack name for use by the inline
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1679
        var name = this.stackSlot ? this.topStackName() : this.incrStack();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1680
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1681
        prefix = '(' + this.push(name) + ' = ' + top + '),';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1682
        stack = this.topStack();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1683
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1684
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1685
      stack = this.topStack();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1686
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1687
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1688
    var item = callback.call(this, stack);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1689
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1690
    if (inline) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1691
      if (this.inlineStack.length || this.compileStack.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1692
        this.popStack();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1693
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1694
      this.push('(' + prefix + item + ')');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1695
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1696
      // Prevent modification of the context depth variable. Through replaceStack
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1697
      if (!/^stack/.test(stack)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1698
        stack = this.nextStack();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1699
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1700
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1701
      this.source.push(stack + " = (" + prefix + item + ");");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1702
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1703
    return stack;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1704
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1705
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1706
  nextStack: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1707
    return this.pushStack();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1708
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1709
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1710
  incrStack: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1711
    this.stackSlot++;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1712
    if(this.stackSlot > this.stackVars.length) { this.stackVars.push("stack" + this.stackSlot); }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1713
    return this.topStackName();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1714
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1715
  topStackName: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1716
    return "stack" + this.stackSlot;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1717
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1718
  flushInline: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1719
    var inlineStack = this.inlineStack;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1720
    if (inlineStack.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1721
      this.inlineStack = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1722
      for (var i = 0, len = inlineStack.length; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1723
        var entry = inlineStack[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1724
        if (entry instanceof Literal) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1725
          this.compileStack.push(entry);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1726
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1727
          this.pushStack(entry);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1728
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1729
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1730
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1731
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1732
  isInline: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1733
    return this.inlineStack.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1734
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1735
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1736
  popStack: function(wrapped) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1737
    var inline = this.isInline(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1738
        item = (inline ? this.inlineStack : this.compileStack).pop();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1739
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1740
    if (!wrapped && (item instanceof Literal)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1741
      return item.value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1742
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1743
      if (!inline) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1744
        this.stackSlot--;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1745
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1746
      return item;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1747
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1748
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1749
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1750
  topStack: function(wrapped) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1751
    var stack = (this.isInline() ? this.inlineStack : this.compileStack),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1752
        item = stack[stack.length - 1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1753
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1754
    if (!wrapped && (item instanceof Literal)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1755
      return item.value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1756
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1757
      return item;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1758
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1759
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1760
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1761
  quotedString: function(str) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1762
    return '"' + str
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1763
      .replace(/\\/g, '\\\\')
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1764
      .replace(/"/g, '\\"')
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1765
      .replace(/\n/g, '\\n')
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1766
      .replace(/\r/g, '\\r')
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1767
      .replace(/\u2028/g, '\\u2028')   // Per Ecma-262 7.3 + 7.8.4
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1768
      .replace(/\u2029/g, '\\u2029') + '"';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1769
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1770
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1771
  setupHelper: function(paramSize, name, missingParams) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1772
    var params = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1773
    this.setupParams(paramSize, params, missingParams);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1774
    var foundHelper = this.nameLookup('helpers', name, 'helper');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1775
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1776
    return {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1777
      params: params,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1778
      name: foundHelper,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1779
      callParams: ["depth0"].concat(params).join(", "),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1780
      helperMissingParams: missingParams && ["depth0", this.quotedString(name)].concat(params).join(", ")
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1781
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1782
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1783
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1784
  // the params and contexts arguments are passed in arrays
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1785
  // to fill in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1786
  setupParams: function(paramSize, params, useRegister) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1787
    var options = [], contexts = [], types = [], param, inverse, program;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1788
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1789
    options.push("hash:" + this.popStack());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1790
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1791
    inverse = this.popStack();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1792
    program = this.popStack();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1793
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1794
    // Avoid setting fn and inverse if neither are set. This allows
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1795
    // helpers to do a check for `if (options.fn)`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1796
    if (program || inverse) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1797
      if (!program) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1798
        this.context.aliases.self = "this";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1799
        program = "self.noop";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1800
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1801
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1802
      if (!inverse) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1803
       this.context.aliases.self = "this";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1804
        inverse = "self.noop";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1805
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1806
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1807
      options.push("inverse:" + inverse);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1808
      options.push("fn:" + program);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1809
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1810
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1811
    for(var i=0; i<paramSize; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1812
      param = this.popStack();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1813
      params.push(param);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1814
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1815
      if(this.options.stringParams) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1816
        types.push(this.popStack());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1817
        contexts.push(this.popStack());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1818
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1819
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1820
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1821
    if (this.options.stringParams) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1822
      options.push("contexts:[" + contexts.join(",") + "]");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1823
      options.push("types:[" + types.join(",") + "]");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1824
      options.push("hashContexts:hashContexts");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1825
      options.push("hashTypes:hashTypes");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1826
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1827
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1828
    if(this.options.data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1829
      options.push("data:data");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1830
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1831
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1832
    options = "{" + options.join(",") + "}";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1833
    if (useRegister) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1834
      this.register('options', options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1835
      params.push('options');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1836
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1837
      params.push(options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1838
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1839
    return params.join(", ");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1840
  }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1841
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1842
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1843
var reservedWords = (
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1844
  "break else new var" +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1845
  " case finally return void" +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1846
  " catch for switch while" +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1847
  " continue function this with" +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1848
  " default if throw" +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1849
  " delete in try" +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1850
  " do instanceof typeof" +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1851
  " abstract enum int short" +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1852
  " boolean export interface static" +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1853
  " byte extends long super" +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1854
  " char final native synchronized" +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1855
  " class float package throws" +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1856
  " const goto private transient" +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1857
  " debugger implements protected volatile" +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1858
  " double import public let yield"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1859
).split(" ");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1860
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1861
var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1862
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1863
for(var i=0, l=reservedWords.length; i<l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1864
  compilerWords[reservedWords[i]] = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1865
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1866
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1867
JavaScriptCompiler.isValidJavaScriptVariableName = function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1868
  if(!JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]+$/.test(name)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1869
    return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1870
  }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1871
  return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1872
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1873
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1874
Handlebars.precompile = function(input, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1875
  if (input == null || (typeof input !== 'string' && input.constructor !== Handlebars.AST.ProgramNode)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1876
    throw new Handlebars.Exception("You must pass a string or Handlebars AST to Handlebars.precompile. You passed " + input);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1877
  }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1878
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1879
  options = options || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1880
  if (!('data' in options)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1881
    options.data = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1882
  }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1883
  var ast = Handlebars.parse(input);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1884
  var environment = new Compiler().compile(ast, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1885
  return new JavaScriptCompiler().compile(environment, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1886
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1887
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1888
Handlebars.compile = function(input, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1889
  if (input == null || (typeof input !== 'string' && input.constructor !== Handlebars.AST.ProgramNode)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1890
    throw new Handlebars.Exception("You must pass a string or Handlebars AST to Handlebars.compile. You passed " + input);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1891
  }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1892
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1893
  options = options || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1894
  if (!('data' in options)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1895
    options.data = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1896
  }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1897
  var compiled;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1898
  function compile() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1899
    var ast = Handlebars.parse(input);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1900
    var environment = new Compiler().compile(ast, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1901
    var templateSpec = new JavaScriptCompiler().compile(environment, options, undefined, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1902
    return Handlebars.template(templateSpec);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1903
  }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1904
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1905
  // Template is only compiled on first use and cached after that point.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1906
  return function(context, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1907
    if (!compiled) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1908
      compiled = compile();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1909
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1910
    return compiled.call(this, context, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1911
  };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1912
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1913
// This file contains YUI-specific wrapper code and overrides for the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1914
// handlebars-compiler module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1915
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1916
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1917
Handlebars parser and compiler. Use this module when you need to compile
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1918
Handlebars templates.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1919
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1920
@module handlebars
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1921
@submodule handlebars-compiler
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1922
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1923
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1924
var levels = ['debug', 'info', 'warn', 'error'];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1925
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1926
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1927
Logs a debugging message. Note that messages will only be logged when the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1928
handlebars module is loaded in "debug" mode.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1929
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1930
@method log
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1931
@param {String} level Log level for this message. Supported levels are "debug",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1932
    "info", "warn", and "error".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1933
@param {String} message Message to log.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1934
@for Handlebars
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1935
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1936
Handlebars.logger.log = function (level, message) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1937
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1938
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1939
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1940
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1941
Compiles and renders a Handlebars template string in a single step.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1942
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1943
If you'll be using a template more than once, it's more efficient to compile it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1944
into a function once using `compile()`, and then render it whenever you need to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1945
by simply executing the compiled function. However, if you only need to compile
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1946
and render a template once, `render()` is a handy shortcut for doing both in a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1947
single step.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1948
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1949
@example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1950
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1951
    Y.Handlebars.render('The pie of the day is {{pie}}!', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1952
        pie: 'Maple Custard'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1953
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1954
    // => "The pie of the day is Maple Custard!"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1955
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1956
@method render
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1957
@param {String} string Handlebars template string to render.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1958
@param {Object} context Context object to pass to the template.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1959
@param {Object} [options] Compile/render options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1960
    @param {Object} [options.helpers] Helper functions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1961
    @param {Object} [options.partials] Partials.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1962
    @param {Object} [options.data] Data.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1963
@return {String} Rendered template string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1964
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1965
Handlebars.render = function (string, context, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1966
    return Handlebars.compile(string)(context, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1967
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1968
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1969
// The rest of this file is just API docs for methods defined in Handlebars
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1970
// itself.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1971
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1972
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1973
Compiles a Handlebars template string into a function. To render the template,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1974
call the function and pass in a context object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1975
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1976
@example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1977
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1978
    var template = Y.Handlebars.compile('The pie of the day is {{pie}}!.');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1979
    template({pie: 'Pecan'});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1980
    // => "The pie of the day is Pecan!"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1981
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1982
@method compile
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1983
@param {String} string Handlebars template string to compile.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1984
@param {Object} [options] Compiler options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1985
@return {Function} Compiled template function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1986
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1987
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1988
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1989
Precompiles a Handlebars template string into a string of JavaScript code. This
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1990
can be used to precompile a template at build time or on the server, and the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1991
resulting template can then be rendered at runtime or on the client without
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1992
needing to go through a compile step.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1993
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1994
To render a precompiled template, evaluate the code and then pass the resulting
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1995
function to `Y.Handlebars.template()` to get back an executable template
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1996
function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1997
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1998
@method precompile
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1999
@param {String} string Handlebars template string to compile.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2000
@param {Object} [options] Compiler options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2001
@return {String} Precompiled template code.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2002
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2003
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2004
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2005
}, '3.10.3', {"requires": ["handlebars-base"]});