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 } |
