[limb-svn] r6366 - 3.x/trunk/cli

svn at limb-project.com svn at limb-project.com
Wed Oct 3 02:13:23 MSD 2007


Author: pachanga
Date: 2007-10-03 02:13:23 +0400 (Wed, 03 Oct 2007)
New Revision: 6366
URL: http://fisheye.limb-project.com/changelog/limb/?cs=6366

Modified:
   3.x/trunk/cli/bundle_classes.php
Log:
-- experimental class sorting implemented

Modified: 3.x/trunk/cli/bundle_classes.php
===================================================================
--- 3.x/trunk/cli/bundle_classes.php	2007-10-02 21:01:37 UTC (rev 6365)
+++ 3.x/trunk/cli/bundle_classes.php	2007-10-02 22:13:23 UTC (rev 6366)
@@ -1,33 +1,62 @@
 <?php
 set_time_limit(0);
 
-$files = array();
-$root_classes = array();
-$nonroot_classes = array();
+function make_bundle($classes)
+{
+  $filter_regex = '~lmb_require.+(' . implode('|', array_keys($classes)) . ')~';
 
-function make_bundle($files, $filter_regex)
-{
   $bundle = '';
-  foreach($files as $file)
+  foreach($classes as $class => $payload)
   {
-    $lines = file($file);
-    //removing <?php stuff
-    array_shift($lines); 
-    if(strpos($lines[count($lines)-1], '?>'))
-      array_pop($lines);
-    
-    //filter unneccessary lmb_require's
-    for($i=0;$i<count($lines);$i++)
+    $bundle .= bundle_with_deps($classes, $class, $payload, $filter_regex);
+  }
+  return $bundle;
+}
+
+function bundle_with_deps($classes, $class, $payload, $filter_regex)
+{
+  static $bundled = array();
+
+  if(isset($bundled[$class]))
+    return '';
+  $bundled[$class] = true;
+
+  if(!$payload['deps'])
+  {
+    return process_file($payload['file'], $filter_regex);
+  }
+  else
+  {
+    $bundle = '';
+    foreach($payload['deps'] as $new_class)
     {
-      if(preg_match($filter_regex, $lines[$i]))
-        unset($lines[$i]);
+      //ignoring built in classes
+      if(isset($classes[$new_class]))
+        $bundle .= bundle_with_deps($classes, $new_class, $classes[$new_class], $filter_regex);
     }
+    $bundle .= process_file($payload['file'], $filter_regex);
+    return $bundle;
+  }
+}
 
-    $bundle .= implode("", $lines);
+function process_file($file, $filter_regex)
+{    
+  $lines = file($file);
+  //removing <?php stuff
+  array_shift($lines); 
+  if(strpos($lines[count($lines)-1], '?>'))
+    array_pop($lines);
+
+  //filter unneccessary lmb_require's
+  for($i=0;$i<count($lines);$i++)
+  {
+    if(preg_match($filter_regex, $lines[$i]))
+      unset($lines[$i]);
   }
-  return $bundle;
+  return implode("", $lines); 
 }
 
+$files = array();
 array_shift($argv);
 foreach($argv as $dir)
 {
@@ -52,19 +81,18 @@
 foreach($files as $file)
 {
   $class = reset(explode('.', basename($file))); 
-  if(preg_match("~class\s+$class\s+.*(extends|implements)~", file_get_contents($file)))
-    $nonroot_classes[] = $file;
-  else
-    $root_classes[] = $file;
+  $deps = array();
+  if(preg_match("~class\s+$class\s+.*(extends|implements)~", $content = file_get_contents($file)))
+  {
+    if(preg_match("~extends\s+(\w+)~", $content, $m))
+      $deps[] = $m[1];
+    if(preg_match("~implements\s+(\w+)~", $content, $m))
+      $deps[] = $m[1];
+  }
 
-  $classes[] = $class;
+  $classes[$class] = array('file' => $file, 'deps' => $deps);
 }
 
-$filter_regex = '~lmb_require.+(' . implode('|', $classes) . ')~';
+$bundle = make_bundle($classes);
 
-$bundle = '';
-
-$bundle .= make_bundle($root_classes, $filter_regex);
-$bundle .= make_bundle($nonroot_classes, $filter_regex);
-
 echo "<?php\n" . $bundle;



More information about the limb-svn mailing list