Browse Source

Factor out the SDL-related code to separate file.

pull/1/head
triton 13 years ago
parent
commit
dee42a91a8
  1. 16
      src/Generator/Generator.cs
  2. 58
      src/Generator/Program.cs

16
src/Generator/Generator.cs

@ -8,14 +8,14 @@ using Cxxi.Templates;
public partial class Generator public partial class Generator
{ {
public List<Transformation> Transformations { get; set; } public List<ModuleTransform> Transformations { get; set; }
Library Library; Library Library;
Options Options; Options Options;
public Generator(Library library, Options options) public Generator(Library library, Options options)
{ {
Transformations = new List<Transformation>(); Transformations = new List<ModuleTransform>();
Library = library; Library = library;
Options = options; Options = options;
@ -98,7 +98,7 @@ public partial class Generator
// Process everything in the global namespace for now. // Process everything in the global namespace for now.
foreach (var module in Library.Modules) foreach (var module in Library.Modules)
{ {
ProcessNamespace(module.Global); ProcessNamespace(module);
} }
} }
@ -117,15 +117,13 @@ public partial class Generator
// Process everything in the global namespace for now. // Process everything in the global namespace for now.
foreach (var module in Library.Modules) foreach (var module in Library.Modules)
{ {
Namespace global = module.Global; foreach (Enumeration @enum in module.Enums)
foreach (Enumeration @enum in global.Enums)
TransformEnum(@enum); TransformEnum(@enum);
foreach (Function function in global.Functions) foreach (Function function in module.Functions)
TransformFunction(function); TransformFunction(function);
foreach (Class @class in global.Classes) foreach (Class @class in module.Classes)
TransformClass(@class); TransformClass(@class);
} }
} }
@ -133,7 +131,7 @@ public partial class Generator
void TransformType(Declaration type) void TransformType(Declaration type)
{ {
foreach (var transform in Transformations) foreach (var transform in Transformations)
transform.ProcessType(type); transform.ProcessDeclaration(type);
} }
void TransformClass(Class @class) void TransformClass(Class @class)

58
src/Generator/Program.cs

@ -81,8 +81,12 @@ class Program
} }
} }
public void ParseNativeHeaders() public void ParseCode()
{ {
var Opts = new ParserOptions();
Opts.Library = library;
Opts.Verbose = false;
Console.WriteLine("Parsing native code..."); Console.WriteLine("Parsing native code...");
foreach (var file in options.Headers) foreach (var file in options.Headers)
@ -99,10 +103,8 @@ class Program
continue; continue;
} }
var Opts = new ParserOptions(); var module = new Module(path);
Opts.FileName = path; Opts.FileName = path;
Opts.Library = library;
Opts.Verbose = false;
if (!ClangParser.Parse(Opts)) if (!ClangParser.Parse(Opts))
{ {
@ -114,50 +116,6 @@ class Program
} }
} }
void TransformSDL(Generator g)
{
g.IgnoreEnumWithMatchingItem("SDL_FALSE");
g.IgnoreEnumWithMatchingItem("DUMMY_ENUM_VALUE");
g.IgnoreEnumWithMatchingItem("SDL_ENOMEM");
g.SetNameOfEnumWithMatchingItem("SDL_SCANCODE_UNKNOWN", "ScanCode");
g.SetNameOfEnumWithMatchingItem("SDLK_UNKNOWN", "Key");
g.SetNameOfEnumWithMatchingItem("KMOD_NONE", "KeyModifier");
g.SetNameOfEnumWithMatchingItem("SDL_LOG_CATEGORY_CUSTOM", "LogCategory");
g.GenerateEnumFromMacros("InitFlags", "SDL_INIT_(.*)").SetFlags();
g.GenerateEnumFromMacros("Endianness", "SDL_(.*)_ENDIAN");
g.GenerateEnumFromMacros("KeyState", "SDL_RELEASED", "SDL_PRESSED");
g.GenerateEnumFromMacros("AlphaState", "SDL_ALPHA_(.*)");
g.GenerateEnumFromMacros("HatState", "SDL_HAT_(.*)");
g.IgnoreModuleWithName("SDL_atomic*");
g.IgnoreModuleWithName("SDL_endian*");
g.IgnoreModuleWithName("SDL_main*");
g.IgnoreModuleWithName("SDL_mutex*");
g.IgnoreModuleWithName("SDL_stdinc*");
g.RemovePrefix("SDL_");
g.RemovePrefix("SCANCODE_");
g.RemovePrefix("SDLK_");
g.RemovePrefix("KMOD_");
g.RemovePrefix("LOG_CATEGORY_");
g.Process();
g.FindEnum("PIXELTYPE").Name = "PixelType";
g.FindEnum("BITMAPORDER").Name = "BitmapOrder";
g.FindEnum("PACKEDORDER").Name = "PackedOrder";
g.FindEnum("ARRAYORDER").Name = "ArrayOrder";
g.FindEnum("PACKEDLAYOUT").Name = "PackedLayout";
g.FindEnum("PIXELFORMAT").Name = "PixelFormat";
g.FindEnum("assert_state").Name = "AssertState";
//gen.FindEnum("LOG_CATEGORY").Name = "LogCategory";
}
public void Run(String[] args) public void Run(String[] args)
{ {
options = new Options(); options = new Options();
@ -167,7 +125,7 @@ class Program
library = new Library(options.OutputNamespace); library = new Library(options.OutputNamespace);
ParseNativeHeaders(); ParseCode();
GenerateCode(); GenerateCode();
} }

Loading…
Cancel
Save