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 }