using System; using System.Collections; using System.IO; using Premake.Tests.Framework; namespace Premake.Tests.CodeBlocks { public class CodeBlocksParser : Parser { #region Parser Methods public override string TargetName { get { return "cb-gcc"; } } #endregion #region Workspace Parsing public override void Parse(Project project, string filename) { /* File header */ Begin(filename + ".workspace"); Match(""); Match(""); Match("\t"); Hashtable packageDependencies = new Hashtable(); while (!Match("\t", true)) { string[] matches = Regex("\t\t"); Package package = new Package(); project.Package.Add(package); package.Name = Path.GetFileNameWithoutExtension(matches[0]); package.Path = Path.GetDirectoryName(matches[0]); package.ScriptName = Path.GetFileName(matches[0]); ArrayList deps = new ArrayList(); while (!Match("\t\t", true)) { matches = Regex("\t\t\t"); deps.Add(Path.GetFileNameWithoutExtension(matches[0])); } packageDependencies.Add(package, deps.ToArray(typeof(string))); } Match(""); foreach (Package package in project.Package) { filename = Path.Combine(Path.Combine(project.Path, package.Path), package.ScriptName); ParseCpp(project, package, filename); foreach (Configuration cfg in package.Config) cfg.Dependencies = (string[])packageDependencies[package]; } } #endregion #region C++ Parsing private void ParseCpp(Project project, Package package, string filename) { Begin(filename); Match(""); Match(""); Match("\t"); Match("\t"); Match("\t\t"); Match(""); } #endregion } }