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