diff --git a/Unahi.CRake/Binary.cs b/Unahi.CRake/Binary.cs index adbe498..19525b2 100644 --- a/Unahi.CRake/Binary.cs +++ b/Unahi.CRake/Binary.cs @@ -27,7 +27,7 @@ public class Binary { return; } } - throw new InvalidOperationException(string.Format("Unknow method '{0}'", key)); + throw new InvalidOperationException(string.Format("Unknow task '{0}'", key)); } private object GetInstance(string className) { diff --git a/Unahi.CRake/CRake.cs b/Unahi.CRake/CRake.cs index 448f9c6..e5299ce 100644 --- a/Unahi.CRake/CRake.cs +++ b/Unahi.CRake/CRake.cs @@ -67,7 +67,12 @@ class CRake : Base { } var key = Arguments.Values[0]; - binary.InvokeMember(key); + try { + binary.InvokeMember(key); + } catch (Exception ex) { + Console.WriteLine("CRake aborted!"); + Console.WriteLine(ex.Message); + } //foreach (var task in binary.Tasks) { // if (task.Key == key) { // if (task.Compiled.Errors.HasErrors) { diff --git a/Unahi.CRake/Code/Base.cs b/Unahi.CRake/Code/Base.cs index 906f440..733e160 100644 --- a/Unahi.CRake/Code/Base.cs +++ b/Unahi.CRake/Code/Base.cs @@ -9,11 +9,13 @@ public class Base { Namespaces = new List(); Tasks = new List(); Imports = new List(); + Codes = new List(); } public List Namespaces { get; set; } public List Tasks { get; set; } public List Imports { get; set; } + public List Codes { get; set; } public string Name { get; set; } } } diff --git a/Unahi.CRake/Code/Compiler.cs b/Unahi.CRake/Code/Compiler.cs index fa78a91..fcc529c 100644 --- a/Unahi.CRake/Code/Compiler.cs +++ b/Unahi.CRake/Code/Compiler.cs @@ -59,7 +59,7 @@ public class Compiler : Base { return binary; } - private void CompileClass(string parent, List tasks, List subClasses, CodeTypeDeclaration parentType) { + private CodeTypeDeclaration CompileClass(string parent, List tasks, List subClasses, CodeTypeDeclaration parentType) { var className = parent.Split(':').Last(); if (className == string.Empty) className = "root"; className = string.Format("Class_{0}", className); @@ -93,8 +93,14 @@ public class Compiler : Base { foreach (var item in subClass.Imports) { codeNamespace.Imports.Add(new CodeNamespaceImport(item)); } - CompileClass(string.Format("{0}{1}{2}", parent, string.IsNullOrEmpty(parent) ? "" : ":", subClass.Name), subClass.Tasks, subClass.Namespaces, type); + var child = CompileClass(string.Format("{0}{1}{2}", parent, string.IsNullOrEmpty(parent) ? "" : ":", subClass.Name), subClass.Tasks, subClass.Namespaces, type); + foreach (var code in subClass.Codes) { + var member = new CodeSnippetTypeMember(code); + child.Members.Add(member); + } } + + return type; } private string GetFullClassName(string parent) { diff --git a/Unahi.CRake/FileParser.cs b/Unahi.CRake/FileParser.cs index b3bf4e0..43059e3 100644 --- a/Unahi.CRake/FileParser.cs +++ b/Unahi.CRake/FileParser.cs @@ -8,7 +8,7 @@ namespace Unahi.CRake { public class FileParser { - const string MethodPattern = "^(require|namespace|desc|task|end|imports)\\s+(.+)"; + const string MethodPattern = "^(require|namespace|desc|task|end|imports|public)\\s+(.+)"; Compiler compiler = new Compiler(); string tempDescription = string.Empty; @@ -43,10 +43,22 @@ public class FileParser { return ProcessTask(parent, body); case "imports": return ProcessUsing(parent, body); + case "public": + return ProcessCode(parent, body); } return null; } + private string ProcessCode(Base parent, string body) { + if (!(parent is Namespace)) { + throw new InvalidOperationException("C# code is only accepted inside a namespace"); + } + var split = Regex.Split(body, "(.+?{.+})\\s*(.*)"); + var code = "public " + split[1]; + parent.Codes.Add(code); + return split[2]; + } + private string ProcessUsing(Base parent, string body) { if (!(parent is Namespace) && !(parent is Compiler)) { throw new InvalidOperationException("using must be inside a namespace or root."); diff --git a/Unahi.CRake/Unahi.CRake.suo b/Unahi.CRake/Unahi.CRake.suo index 5ccefd3..c77e3f9 100644 Binary files a/Unahi.CRake/Unahi.CRake.suo and b/Unahi.CRake/Unahi.CRake.suo differ diff --git a/Unahi.CRake/bin/Debug/crake.exe b/Unahi.CRake/bin/Debug/crake.exe index a41d603..b92d56f 100644 Binary files a/Unahi.CRake/bin/Debug/crake.exe and b/Unahi.CRake/bin/Debug/crake.exe differ diff --git a/Unahi.CRake/bin/Debug/crake.pdb b/Unahi.CRake/bin/Debug/crake.pdb index f9e13a3..7e5f516 100644 Binary files a/Unahi.CRake/bin/Debug/crake.pdb and b/Unahi.CRake/bin/Debug/crake.pdb differ diff --git a/Unahi.CRake/bin/Debug/crake.vshost.exe b/Unahi.CRake/bin/Debug/crake.vshost.exe index 69ed6c0..14041ba 100644 Binary files a/Unahi.CRake/bin/Debug/crake.vshost.exe and b/Unahi.CRake/bin/Debug/crake.vshost.exe differ diff --git a/Unahi.CRake/bin/Debug/crakefile b/Unahi.CRake/bin/Debug/crakefile index 1b40050..dec5472 100644 --- a/Unahi.CRake/bin/Debug/crakefile +++ b/Unahi.CRake/bin/Debug/crakefile @@ -6,6 +6,10 @@ namespace :db do task :create do System.Console.WriteLine("criei o banco de dados"); end + + task :say do + CreateTable2("HI"); + end end namespace :tests do diff --git a/Unahi.CRake/bin/Debug/tasks/migration.crake b/Unahi.CRake/bin/Debug/tasks/migration.crake index 0b85ec8..e583257 100644 --- a/Unahi.CRake/bin/Debug/tasks/migration.crake +++ b/Unahi.CRake/bin/Debug/tasks/migration.crake @@ -11,4 +11,17 @@ namespace :db do task :migration do System.Console.WriteLine("fiz a migration"); end + + task :my do + CreateTable(""); + end + + public void CreateTable(string tableName) { + Console.WriteLine("Custom method in C#"); + } + + public void CreateTable2(string tableName) { + Console.WriteLine("Custom method in C# 2!"); + Console.WriteLine("Table: " + tableName); + } end \ No newline at end of file diff --git a/Unahi.CRake/bin/Release/crake.exe b/Unahi.CRake/bin/Release/crake.exe index 4a142cc..f225d1b 100644 Binary files a/Unahi.CRake/bin/Release/crake.exe and b/Unahi.CRake/bin/Release/crake.exe differ diff --git a/Unahi.CRake/bin/Release/crake.pdb b/Unahi.CRake/bin/Release/crake.pdb index ca4a421..9e8c888 100644 Binary files a/Unahi.CRake/bin/Release/crake.pdb and b/Unahi.CRake/bin/Release/crake.pdb differ diff --git a/Unahi.CRake/obj/Debug/crake.exe b/Unahi.CRake/obj/Debug/crake.exe index a41d603..b92d56f 100644 Binary files a/Unahi.CRake/obj/Debug/crake.exe and b/Unahi.CRake/obj/Debug/crake.exe differ diff --git a/Unahi.CRake/obj/Debug/crake.pdb b/Unahi.CRake/obj/Debug/crake.pdb index f9e13a3..7e5f516 100644 Binary files a/Unahi.CRake/obj/Debug/crake.pdb and b/Unahi.CRake/obj/Debug/crake.pdb differ diff --git a/Unahi.CRake/obj/Release/crake.exe b/Unahi.CRake/obj/Release/crake.exe index 4a142cc..f225d1b 100644 Binary files a/Unahi.CRake/obj/Release/crake.exe and b/Unahi.CRake/obj/Release/crake.exe differ diff --git a/Unahi.CRake/obj/Release/crake.pdb b/Unahi.CRake/obj/Release/crake.pdb new file mode 100644 index 0000000..9e8c888 Binary files /dev/null and b/Unahi.CRake/obj/Release/crake.pdb differ