рд╣рдо рдЕрдкрдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рд▓рд┐рдЦрддреЗ рд╣реИрдВ

рд╣рдм рдкрд░ рдпрд╣рд╛рдВ рд╕рд╣рд┐рдд рд▓реЗрдЦ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ
рдкрд╣рд▓реЗ, рдпрд╣ рдореБрдЭреЗ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - "рдШреБрдЯрдиреЗ рдкрд░" - рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред
рд▓реЗрдХрд┐рди, рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдп рднреЗрдЬрд╛ред
рд▓рд┐рдЦреЗрдВ, рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди, рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдпрд╣рд╛рдВ, рдлрд┐рд░ рдЖрдк рдПрдХ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЖрдПрдВрдЧреЗред
рдЖрд╡рд╢реНрдпрдХрддрд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЕрддреНрдпрдзрд┐рдХ рдереА, рдФрд░ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред
рд▓реЗрдХрд┐рди рдЦреЗрд▓ рдХреЗ рд╣рд┐рдд рдореЗрдВ рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред

рджрд░рдЕрд╕рд▓, рдЕрдЧрд░ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдХрдЯреМрддреА рдХреЗ рддрд╣рдд рдХреБрдЫ рдиреЛрдЯ рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ред

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдкрд░рд┐рдгрд╛рдо , рдмрд┐рд▓реНрд▓реА ред



рджрд┐рдП рдЧрдП:

рд╕реНрд░реЛрдд рдЯреЗрдореНрдкрд▓реЗрдЯ JS рд╕реНрдЯреНрд░рд┐рдВрдЧ () рд╣реИ, рдФрд░ рдбреЗрдЯрд╛ JS рдСрдмреНрдЬреЗрдХреНрдЯ () рд╣реИред
рдлреЙрд░реНрдо рдХреЗ рдмреНрд▓реЙрдХ {% рдирд╛рдо%} рдмреЙрдбреА {% /%} , рдЕрд╕реАрдорд┐рдд рдиреЗрд╕реНрдЯрд┐рдВрдЧ рд╕рдВрднрд╡ рд╣реИ ред
рдпрджрд┐ рдирд╛рдо рдорд╛рди рдПрдХ рд╕реВрдЪреА рд╣реИ , рддреЛ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдпрджрд┐ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рддрддреНрд╡ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рджреЗрдЦреЗрдВ: {{рдирд╛рдо}} ред
рдмреНрд▓реЙрдХ рдФрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдореЗрдВ, рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП {{ред}} рдпрд╛ {%ред%} , рдЬрд╣рд╛рдВ рдмрд┐рдВрджреБ рд╢реАрд░реНрд╖- рд╕реНрддрд░ рдХреА рд╡рд╕реНрддреБ рдХрд╛ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рд╣реЛрдЧрд╛ред
рдЕрднреА рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВ - рдпрд╣ {# рдХрд┐рд╕реА рднреА рдЯрд┐рдкреНрдкрдгреА w \ wo рдорд▓реНрдЯреАрд▓рд╛рдЗрди #} рд╣реИ ред
рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реНрд╡рдпрдВ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рд╣реИрдВ; рд╡реЗ рдПрдХ рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ: {{ред: рдЯреНрд░рд┐рдо: рдХреИрдкрд┐рдЯрд▓рд╛рдЗрдЬрд╝ ...}} ред

рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

var str = render (tpl, obj); 


рд╕рд╛рдмрд┐рдд:
рдЖрддреНрдо-рд╕рдореНрдорд╛рди рдХреЗ рд▓рд┐рдП +1 ред

UPD 2 : рдореИрдВ рдЕрднреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ "рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП" рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХреНрдпреЛрдВ, рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрдзрд┐рдорд╛рдирддрдГ рдбрд┐рдмрдЧрд░ рдХреЗ рд╕рд╛рдеред
UPD 3 : рдпрд╣ "рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░" рд╣реИред рдЕрднреА рднреА "рдЕрдиреБрдХреВрд▓рди" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛рдБ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдХрдо рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ред

рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рдХреНрдпреЛрдВрдХрд┐ рдЪреВрдВрдХрд┐ рд╕реНрд░реЛрдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рдЖрдк рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдн рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред

рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдЖрдк рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡реЗ рдЪрдордХ рди рджреЗрдВ:

 // to cut the comments tpl = tpl.replace ( /\{#[^]*?#\}/g, '' ); 


рд╕рдВрдХреЗрдд: [^] рдХрд┐рд╕реА рднреА рдЪрд░рд┐рддреНрд░ рдХрд╛ рдорддрд▓рдм рд╣реИ, * - рдЬрд┐рддрдиреА рдмрд╛рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛред

рдЕрдм рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо "рд╕реНрд╡рдЪреНрдЫ" рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВрдЧреЗред
рдЪреВрдВрдХрд┐ рдмреНрд▓реЙрдХ рд╕рдВрднрд╡ рд╣реИ рдиреЗрд╕реНрдЯреЗрдб рд╣реИрдВ, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдПрдХ рдкреЗрдбрд╝ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдкреЗрдбрд╝ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрд░ рдкрд░ рдЬреЗрдПрд╕ рдЕрд░реНрд░реЗ () рд╣реЛрдВрдЧреЗ, рдЬрд┐рдирдХреЗ рддрддреНрд╡реЛрдВ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд╕рдВрд░рдЪрдирд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдЗрд╕ рд╕рд░рдгреА рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдордХреНрдЦрд┐рдпреЛрдВ рдХреЛ рдХрдЯрд▓реЗрдЯ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ String.split () рдФрд░ String.match () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ ред

рд╣рдореЗрдВ obj рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡реИрд▓ рдирд╛рдо рдкрд░ рдПрдХ рдЧрд╣рд░реА рдЦреЛрдЬ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд▓рд╛рдЧреВ getObjDeep рд╡рд┐рдХрд▓реНрдк:
 var deeps = function (obj, val) { var hs = val.split('.'); var len = hs.length; var deep; var num = 0; for (var i = 0; i < len; i++) { var el = hs[i]; if (deep) { if (deep[el]) { deep = deep[el]; num++; } } else { if (obj[el]) { deep = obj[el]; num++; } } } if (num == len) { return deep; } else { return undefined; } }; 



рдФрд░ рддреБрд░рдВрдд рдореИрдВ THANKS, рд╕рдмреНрдЬрд╝реА рдХреЛ рд▓рд╛рд▓рдЪреА рдорд╛рддреНрд░рд╛рддреНрдордХ рдирд┐рд░реНрдзрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдХрд╣реВрдВрдЧрд╛ ред

UPD 1 : рдЕрдВрдХ # 2 рдХреЗ рд▓рд┐рдП lynx1983 рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред

рдЗрд╕рд▓рд┐рдП, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ рдФрд░ рддрддреНрд╡реЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ:

 //   : // , , , // ,   ,    var ptn = /\{\%\s*[a-zA-Z0-9._/:-]+?\s*\%\}/g; //   var parts = tpl.split (ptn); //   var matches = tpl.match (ptn); 


рдЙрдбрд╝рд╛рдиреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рджреЛ рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдПрдХ рдореЗрдВ, рд╣рдо рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗ, рджреВрд╕рд░реЗ рдореЗрдВ рдорд╛рдЪрд┐рд╕ рдЪрдХреНрд░ рд╕реЗ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рд╣реЛрдЧрд╛ред

 //   var blocks = []; //  var curnt = []; if( matches ){ // .. .. null var len = matches.length; for ( var i = 0; i < len; i++ ) { //  {%  %},    trim var str = matches[i].replace (/^\{\%\s*|\s*\%\}$/g, ''); if (str === '/') { // finalise block // ... } else { // make block // ... } // ... 


рдпрд╣рд╛рдВ рдмреНрд▓реЙрдХ рдЪрдпрдирд┐рдд рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдореА рд╕рд░рдгреА рд╣реИ, рдФрд░ рд╡рд░реНрддрдорд╛рди рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рд░рдгреА рд╣реИред

рд▓реВрдк рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ, рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЕрдм рдХреНрдпрд╛ рд╣реИ, рдмреНрд▓реЙрдХ рдпрд╛ рдЕрдВрдд рдХреА рд╢реБрд░реБрдЖрддред
рдпрджрд┐ рдмреНрд▓реЙрдХ рдХреА рд╢реБрд░реБрдЖрдд, рдЕрд░реНрдерд╛рддреНред str! == '/' , рдлрд┐рд░ рдПрдХ рдирдпрд╛ рддрддреНрд╡ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдРрд░реЗ рдореЗрдВ рдкреБрд╢ рдХрд░реЗрдВред
рдФрд░ рд╕рд╛рде рд╣реА рдЗрд╕реЗ рдХрд▓рд╢ рдореЗрдВ рдзрдХреЗрд▓ рджреЗрдВред рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕ рд╕реНрддрд░ рдкрд░ рд╣реИрдВред
рд░рд╛рд╕реНрддреЗ рдХреЗ рд╕рд╛рде, рд╣рдо рдмреНрд▓реЙрдХ рдореЗрдВ рдЦреБрдж рдХреЛ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВред
рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЦрд╛рд▓реА рдкреЗрдЯреА рд╣реИ, рддреЛ рд╣рдо рдкреЗрдбрд╝ рдХреЗ рд╢реВрдиреНрдп рд╕реНрддрд░ рдкрд░ рд╣реИрдВред
рдпрджрд┐ curnt рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЕрдВрддрд┐рдо curnt рдХреЗ рдиреЗрд╕реНрдЯреЗрдб рддрддреНрд╡ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 //    var cln = curnt.length; if (cln == 0) { // ..   ,         blocks.push ( struct ); //   ,    curnt.push ( struct ); } else { //    nested    curnt[cln - 1].nest.push ( struct ); //    ""      curnt var last = curnt[cln - 1].nest.length - 1; curnt.push ( curnt[cln - 1].nest [ last ] ); } 


рддрджрдиреБрд╕рд╛рд░, рд╕рд░рдгреА рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдиреНрдпреВрдирддрдо рд╣реИ:

 var struct = { //  obj   cnt: deeps( obj, str ), //   nest: [], //      be4e: parts[ i + 1 ], // str -- ,     // cnt -- -,       af3e: { cnt: null, str: '' } }; 


рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд╣рд╛рдВ рдмреНрд▓реЙрдХ рдХреЗ рдмрд╛рдж рдХреБрдЫ рдФрд░ рд╣реЛ, рддреЛ af3e.str {рдмреНрд▓реЙрдХ /%} рд╡рд░реНрддрдорд╛рди рдмреНрд▓реЙрдХ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдХреА рд░реЗрдЦрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╣рдо рдмреНрд▓реЙрдХ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рд╕рдордп рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд▓рд┐рдВрдХ рдиреАрдЪреЗ рд░рдЦ рджреЗрдВрдЧреЗ, рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗред
рдЙрд╕реА рд╕рдордп, рд╣рдо рдХрд░реНрдЯ рддрддреНрд╡ рдХреЗ рдЕрдВрддрд┐рдо рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред

 if (str === '/') { //   curnt //   //    curnt [cln - 1].af3e = { cnt: ( curnt [ cln - 2 ] ? curnt [ cln - 2 ].cnt : obj ), str: parts[ i + 1 ] }; curnt.pop(); 


рдЕрдм рд╣рдо рдПрдХ рдЖрдпрд╛рдореА рдЖрдпрд╛рдо рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЙрдирдХреА рд╡рд░реНрддрдорд╛рди рдУрдмрдЬ рдХреЗ рд╕рд╛рде рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкрджрд╛рд░реНрде рд╣реЛрдВрдЧреЗред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд░рд┐рдгрд╛рдореА рдмреНрд▓реЙрдХреЛрдВ рдХреЛ "рдкрд╛рд░реНрд╕" рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╕реВрдЪреА рд╣реЛ рд╕рдХрддреА рд╣реИред
рдпрд╣ рдереЛрдбрд╝рд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд▓реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдпрд╣ рдЕрдм рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

 //        var stars = [ [ parts[0], obj ] ]; parseBlocks( blocks, stars ); 


рдкрд╛рд░реНрд╕реЗрдмреНрд▓реЙрдХ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреГрд╢реНрдп ()
 var parseBlocks = function ( blocks, stars ) { var len = blocks.length; for (var i = 0; i < len; i++) { var block = blocks [i]; //    obj   if (block.cnt) { var current = block.cnt; //   switch ( Object.prototype.toString.call( current ) ) { //     case '[object Array]': var len1 = current.length; for ( var k = 0; k < len1; k++ ) { //   stars       stars.push ( [ block.be4e, current[k] ] ); //    parseBlocks( block.nest, stars ); } break; //     case '[object Object]': for (var k in current) { if (current.hasOwnProperty(k)) { //   stars       stars.push ( [ block.be4e, current[k] ] ); //    parseBlocks( block.nest, stars ); } } break; //       ,    default: stars.push ( [ block.be4e, current ] ); parseBlocks( block.nest, stars ); } //   stars ,      stars.push ( [ block.af3e.str, block.af3e.cnt ] ); } } }; 



рдЕрдЧрд▓рд╛, рд╣рдо рдкрд░рд┐рдгрд╛рдореА рд╕рд┐рддрд╛рд░реЛрдВ рдХреЛ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

 var pstr = []; var len = stars.length; for ( var i = 0; i < len; i++ ) { pstr.push( parseStar ( stars[i][0], stars[i][1] ) ); } // : return pstr.join (''); 


ParseStar рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреГрд╢реНрдп ()
 var parseStar = function ( part, current ) { var str = ''; //   var ptn = /\{\{\s*.+?\s*\}\}/g; var parts = part.split (ptn); var matches = part.match (ptn); //    str += parts[0]; if (matches) { var len = matches.length; for (var i = 0; i < len; i++) { //     var match = matches [i]; //     trim var el = match.replace(/^\{\{\s*|\s*\}\}$/g, ''); var strel = ''; //      var deep = deeps( current, el ); //  ,      deep && ( strel += deep ); str += strel; } if (len > 0) { str += parts[ len ]; } } return str; } 



рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЫреЛрдЯрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдпрд╣ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЕрдЧрд░ рдЗрд╕реЗ рдПрдХ рдмрд┐рдВрджреБ рджрд┐рдпрд╛ рдЬрд╛рдПред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдореИрдВрдиреЗ "рдЕрдкрдиреЗ рджрдо рдкрд░" рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрдм "рд╡рд░реНрддрдорд╛рди рддрддреНрд╡" рдпрд╛ "рдореВрд▓реНрдп" рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдЦреБрдж рдЕрд╡рдзрд╛рд░рдгрд╛ рджрд┐рдЦрд╛рдирд╛ рдерд╛ ...

рдФрд░ рдкрд░рд┐рдгрд╛рдо, рдЬреИрд╕рд╛ рдХрд┐ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред
рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдБ рд╣реИ ред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреЛрдИ рдХрд╛рдо рдЖрдПрдЧрд╛ред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

:)

Source: https://habr.com/ru/post/In201684/


All Articles