implemented asset resolving
[swftools.git] / lib / as3 / compiler.c
index 8bd8dd2..e6571db 100644 (file)
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
 
+#include "common.h"
 #include "tokenizer.h"
 #include "files.h"
 #include "parser.h"
 #include "parser.tab.h"
 #include "compiler.h"
+#include "registry.h"
+#include "assets.h"
 #include "../os.h"
 #ifdef HAVE_SYS_STAT_H
 #include <sys/stat.h>
@@ -49,7 +52,7 @@ void as3_add_include_dir(char*dir)
 {
     add_include_dir(dir);
 }
-void as3_set_option(char*key, char*value)
+void as3_set_option(const char*key, const char*value)
 {
     if(!strcmp(key, "recurse")) {
         config_recurse=atoi(value);
@@ -112,6 +115,7 @@ static void as3_parse_file_or_array(const char*name, const char*filename, const
     a3_parse();
     as3_lex_destroy();
     finish_file();
+    if(fi) fclose(fi);
 }
 
 typedef struct _scheduled_file {
@@ -154,7 +158,7 @@ void as3_schedule_file(const char*name, const char*filename)
     }
 
     filename = normalize_path(filename);
-    
+
     if(dict_contains(scheduled_dict, filename)) {
         return; //already processed
     } else {
@@ -198,7 +202,7 @@ void as3_parse_file(const char*filename)
 
     compile_list = 0;
     as3_pass = 1;
-    as3_parse_file_or_array(filename, fullfilename, 0,0);
+    as3_schedule_file(filename, fullfilename);
     as3_parse_scheduled();
     
     registry_resolve_all();
@@ -268,7 +272,8 @@ void as3_schedule_package(const char*package)
     char*dirname = strdup(package);
     int s=0;
     while(dirname[s]) {
-        if(dirname[s]=='.') dirname[s]='/';
+        if(dirname[s]=='.') 
+            dirname[s] = path_seperator;
         s++;
     };
     if(!as3_schedule_directory(dirname))
@@ -300,22 +305,19 @@ static void schedule_class(const char*package, const char*cls, char error)
 
     strcpy(filename+t, cls);
     strcpy(filename+t+l2, ".as");
-    char*f=0;
-    if(!(f=find_file(filename, error))) {
+    char*f=find_file(filename, error);
+    if(!f) {
         int i;
-        /* try lower case filename (not packagename!), too */
-        for(i=t;i<t+l2;i++) {
-            if(filename[i]>='A' && filename[i]<='Z')
-                filename[i] += 'a'-'A';
-        }
-        if(!(f=find_file(filename, error))) {
-            if(error) {
-                strcpy(filename+t, cls);
-                strcpy(filename+t+l2, ".as");
-                as3_warning("Could not open file %s", filename);
-            }
-            return;
-        }
+       filename = filename_to_lowercase(filename);
+        f=find_file(filename, error);
+    }
+    if(!f) {
+       if(error) {
+           strcpy(filename+t, cls);
+           strcpy(filename+t+l2, ".as");
+           as3_warning("Could not open file %s", filename);
+       }
+       return;
     }
     as3_schedule_file(filename, f);
 }
@@ -342,6 +344,10 @@ void* as3_getcode()
     }
     return as3code;
 }
+void* as3_getassets(void*t)
+{
+    return swf_AssetsToTags((TAG*)t, registry_getassets());
+}
 char* as3_getglobalclass()
 {
     return as3_globalclass;