Mercurial > pub > ImplabJs
comparison src/implab/text/template-compile.js @ 26:fb23f3c854df
added new format for tamplates
author | nickolay |
---|---|
date | Sun, 10 Dec 2017 14:10:21 +0300 |
parents | f750c89976d3 |
children |
comparison
equal
deleted
inserted
replaced
25:c2a7d21175ce | 26:fb23f3c854df |
---|---|
3 function (request, format, trace) { | 3 function (request, format, trace) { |
4 | 4 |
5 // разбивает строку шаблона на токены, возвращает контекст для | 5 // разбивает строку шаблона на токены, возвращает контекст для |
6 // дальнейшей обработки в visitTemplate | 6 // дальнейшей обработки в visitTemplate |
7 var parseTemplate = function (str) { | 7 var parseTemplate = function (str) { |
8 var tokens = str.split(/(<%=|<%|%>)/); | 8 var tokens = str.split(/(<%=|\[%=|<%|\[%|%\]|%>)/); |
9 var pos = -1; | 9 var pos = -1; |
10 var data = [], | 10 var data = [], |
11 code = []; | 11 code = []; |
12 | 12 |
13 return { | 13 return { |
61 | 61 |
62 function visitTemplate(context) { | 62 function visitTemplate(context) { |
63 while (context.next()) { | 63 while (context.next()) { |
64 switch (context.token()) { | 64 switch (context.token()) { |
65 case "<%": | 65 case "<%": |
66 case "[%": | |
66 visitCode(context); | 67 visitCode(context); |
67 break; | 68 break; |
68 case "<%=": | 69 case "<%=": |
70 case "[%=": | |
69 visitInline(context); | 71 visitInline(context); |
70 break; | 72 break; |
71 default: | 73 default: |
72 visitTextFragment(context); | 74 visitTextFragment(context); |
73 break; | 75 break; |
76 } | 78 } |
77 | 79 |
78 function visitInline(context) { | 80 function visitInline(context) { |
79 var code = ["$p.push("]; | 81 var code = ["$p.push("]; |
80 while (context.next()) { | 82 while (context.next()) { |
81 if (context.token() == "%>") | 83 if (context.token() == "%>" || context.token() == "%]") |
82 break; | 84 break; |
83 code.push(context.token()); | 85 code.push(context.token()); |
84 } | 86 } |
85 code.push(");"); | 87 code.push(");"); |
86 context.pushCode(code.join('')); | 88 context.pushCode(code.join('')); |
87 } | 89 } |
88 | 90 |
89 function visitCode(context) { | 91 function visitCode(context) { |
90 var code = []; | 92 var code = []; |
91 while (context.next()) { | 93 while (context.next()) { |
92 if (context.token() == "%>") | 94 if (context.token() == "%>" || context.token() == "%]") |
93 break; | 95 break; |
94 code.push(context.token()); | 96 code.push(context.token()); |
95 } | 97 } |
96 context.pushCode(code.join('')); | 98 context.pushCode(code.join('')); |
97 } | 99 } |