[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