private bool OpenVirtualFileModel(string virtualPath) { int p = virtualPath.IndexOf("::"); if (p < 0) return false; string container = virtualPath.Substring(0, p); string ext = Path.GetExtension(container).ToLower(); if (ext != ".swf" && ext != ".swc" && ext != ".ane") return false; if (!File.Exists(container)) return false; string fileName = Path.Combine(container, virtualPath.Substring(p + 2).Replace('.', Path.DirectorySeparatorChar)); PathModel path = new PathModel(container, contextInstance); ContentParser parser = new ContentParser(path.Path); parser.Run(); AbcConverter.Convert(parser, path, contextInstance); if (path.HasFile(fileName)) { FileModel model = path.GetFile(fileName); ASComplete.OpenVirtualFile(model); return true; } int split = fileName.LastIndexOf(Path.DirectorySeparatorChar) + 1; fileName = fileName.Substring(0, split) + "package.as"; if (path.HasFile(fileName)) { FileModel model = path.GetFile(fileName); ASComplete.OpenVirtualFile(model); return true; } fileName = fileName.Substring(0, split) + "toplevel.as"; if (path.HasFile(fileName)) { FileModel model = path.GetFile(fileName); ASComplete.OpenVirtualFile(model); return true; } return false; }
/// <summary> /// Parse a packaged library file /// </summary> /// <param name="path">Models owner</param> public override void ExploreVirtualPath(PathModel path) { if (path.WasExplored) { if (MxmlFilter.HasCatalog(path.Path)) MxmlFilter.AddCatalog(path.Path); if (path.FilesCount != 0) // already parsed return; } try { if (File.Exists(path.Path) && !path.WasExplored) { bool isRefresh = path.FilesCount > 0; //TraceManager.AddAsync("parse " + path.Path); lock (path) { path.WasExplored = true; ContentParser parser = new ContentParser(path.Path); parser.Run(); AbcConverter.Convert(parser, path, this); } // reset FCSH if (isRefresh) { EventManager.DispatchEvent(this, new DataEvent(EventType.Command, "ProjectManager.RestartFlexShell", path.Path)); } } } catch (Exception ex) { string message = TextHelper.GetString("Info.ExceptionWhileParsing"); TraceManager.AddAsync(message + " " + path.Path); TraceManager.AddAsync(ex.Message); TraceManager.AddAsync(ex.StackTrace); } }