JsTemplate.php
[Pman.Core] / JsTemplate.php
index 44a1d1f..5cb87a9 100644 (file)
@@ -95,17 +95,21 @@ class Pman_Core_JsTemplate extends Pman {
         
         $contents = file_get_contents($fn);
         $ar = preg_split('/(\{[^\}]+})/', $contents, -1, PREG_SPLIT_DELIM_CAPTURE);
+        
+        
+        
+        
         //echo '<PRE>' . htmlspecialchars(print_r($ar,true));
         
         $out= array();
         
-        $head = "var $name = function(t) {\n    var ret=[];\n";
+        $head = "$name = function(t)\n{\n    var ret = [];\n\n";
         
         $funcs = array();
         // do not allow nested functions..?
-        $fstart = 0;
+        $fstart = -1;
         $indent = 1;
-        
+        $inscript = false;
         $ret = &$out;
         foreach($ar as $item) {
             $in = str_repeat("    ", $indent);
@@ -115,6 +119,19 @@ class Pman_Core_JsTemplate extends Pman {
                 case (!strlen($item)):
                     continue;
                 
+                case ($inscript && ($item != '{end:}')):
+                    $ret[] = $item;
+                    continue;
+                
+                case ($inscript && ($item == '{end:}')):
+                    $inscript = false;
+                    continue;
+                
+                
+                case ($inscript):
+                     $ret[] = $item;
+                     continue;
+                    
                 case ($item[0] != '{'):
                     if (!strlen(trim($item))) {
                         continue;
@@ -122,6 +139,13 @@ class Pman_Core_JsTemplate extends Pman {
                     $ret[] = $in . "ret += ". json_encode($item) . ";";
                     continue;
                 
+                
+                case ($item == '{script:}'): 
+                    $inscript = true;
+                    continue;
+                
+                
+                
                 case (substr($item,1,3) == 'if('):
                     $ret[] = $in . substr($item,1,-1) . ' {';
                     $indent++;
@@ -132,6 +156,7 @@ class Pman_Core_JsTemplate extends Pman {
                     $in = str_repeat("    ", $indent);
                     $ret[] = $in . "}";
                     if ($fstart == $indent) {
+                        $fstart = -1;
                         $ret = &$out;
                     }
                     continue;
@@ -143,7 +168,7 @@ class Pman_Core_JsTemplate extends Pman {
                 case (substr($item,1,9) == 'function:'):
                     $fstart = $indent;
                     $indent++;
-                    $ret = &$funct;
+                    $ret = &$funcs;
                     $def  = substr($item,10,-1) ;
                     list($name,$body) = explode('(', $def, 2);
                     
@@ -165,7 +190,7 @@ class Pman_Core_JsTemplate extends Pman {
         }
         $in = str_repeat("    ", $indent);
         $ret[] = $in .  "return ret.join('');\n}\n";
-        return $head . implode("\n",$funcs) . "\n" .implode("\n",$out) ;
+        return $head . implode("\n",$funcs) . "\n\n" .implode("\n",$out) ;
         //echo '<PRE>' . htmlspecialchars(implode("\n",$ret));