Cleaned up Generator class tree

This significantly reduces the amount of duplicated code between
Generator implementations.
This commit is contained in:
Stefanos A. 2013-10-31 00:18:07 +01:00
parent 51cb1f02db
commit a3bd227e20
4 changed files with 34 additions and 43 deletions

View file

@ -12,29 +12,12 @@ namespace Bind.ES
class ESGenerator : Generator class ESGenerator : Generator
{ {
public ESGenerator(string nsName, string dirName) public ESGenerator(string nsName, string dirName)
: base(nsName, dirName)
{ {
if (String.IsNullOrEmpty(nsName))
throw new ArgumentNullException("nsName");
if (dirName == null)
dirName = nsName;
glTypemap = "GL2/gl.tm";
csTypemap = Settings.LanguageTypeMapFile;
enumSpec = dirName + "/signatures.xml";
enumSpecExt = String.Empty;
glSpec = dirName + "/signatures.xml";
glSpecExt = String.Empty;
Settings.OverridesFile = dirName + "/overrides.xml";
Settings.ImportsFile = "Core.cs"; Settings.ImportsFile = "Core.cs";
Settings.DelegatesFile = "Delegates.cs"; Settings.DelegatesFile = "Delegates.cs";
Settings.EnumsFile = "Enums.cs"; Settings.EnumsFile = "Enums.cs";
Settings.WrappersFile = "ES.cs"; Settings.WrappersFile = "ES.cs";
Settings.ImportsClass = "Core";
Settings.DelegatesClass = "Delegates";
Settings.OutputClass = "GL";
} }
} }
} }

View file

@ -27,33 +27,20 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
namespace Bind.GL2 namespace Bind.GL2
{ {
class GL4Generator : ES.ESGenerator class GL4Generator : Generator
{ {
public GL4Generator(string name, string dirname) public GL4Generator(string name, string dirname)
: base(name, dirname) : base(name, dirname)
{ {
glTypemap = "GL2/gl.tm"; Settings.OverridesFile = Path.Combine(dirname, "gloverrides.xml");
csTypemap = Settings.LanguageTypeMapFile;
enumSpec = "GL2/signatures.xml"; Profile = "glcore";
enumSpecExt = String.Empty;
glSpec = "GL2/signatures.xml";
glSpecExt = String.Empty;
Settings.OverridesFile = "GL2/gloverrides.xml";
Settings.ImportsFile = "GLCore.cs";
Settings.DelegatesFile = "GLDelegates.cs";
Settings.EnumsFile = "GLEnums.cs";
Settings.WrappersFile = "GL.cs";
Settings.ImportsClass = "Core";
Settings.DelegatesClass = "Delegates";
Settings.OutputClass = "GL";
} }
} }
} }

View file

@ -37,13 +37,33 @@ namespace Bind.GL2
//protected static readonly Dictionary<string, string> doc_replacements; //protected static readonly Dictionary<string, string> doc_replacements;
protected ISpecReader SpecReader = new XmlSpecReader(); protected ISpecReader SpecReader = new XmlSpecReader();
protected string Profile = "gl";
#endregion #endregion
#region Constructors #region Constructors
public Generator() public Generator(string nsName, string dirName)
{ {
if (String.IsNullOrEmpty(nsName))
throw new ArgumentNullException("nsName");
if (dirName == null)
dirName = "GL2";
glTypemap = "GL2/gl.tm";
csTypemap = Settings.LanguageTypeMapFile;
enumSpec = Path.Combine(dirName, "signatures.xml");
enumSpecExt = String.Empty;
glSpec = Path.Combine(dirName, "signatures.xml");
glSpecExt = String.Empty;
Settings.OverridesFile = Path.Combine(dirName, "overrides.xml");
Settings.ImportsClass = "Core";
Settings.DelegatesClass = "Delegates";
Settings.OutputClass = "GL";
if (Settings.Compatibility == Settings.Legacy.Tao) if (Settings.Compatibility == Settings.Legacy.Tao)
{ {
Settings.OutputNamespace = "Tao.OpenGl"; Settings.OutputNamespace = "Tao.OpenGl";
@ -77,11 +97,9 @@ namespace Bind.GL2
string overrides = Path.Combine(Settings.InputPath, Settings.OverridesFile); string overrides = Path.Combine(Settings.InputPath, Settings.OverridesFile);
Type.GLTypes = SpecReader.ReadTypeMap(Path.Combine(Settings.InputPath, glTypemap)); Type.GLTypes = SpecReader.ReadTypeMap(Path.Combine(Settings.InputPath, glTypemap));
Type.CSTypes = SpecReader.ReadCSTypeMap(Path.Combine(Settings.InputPath, csTypemap)); Type.CSTypes = SpecReader.ReadCSTypeMap(Path.Combine(Settings.InputPath, csTypemap));
SpecReader.ReadEnums(Path.Combine(Settings.InputPath, enumSpec), Enums, "gl"); SpecReader.ReadEnums(Path.Combine(Settings.InputPath, enumSpec), Enums, Profile);
SpecReader.ReadEnums(Path.Combine(Settings.InputPath, enumSpec), Enums, "glcore");
SpecReader.ReadEnums(overrides, Enums, ""); SpecReader.ReadEnums(overrides, Enums, "");
SpecReader.ReadDelegates(Path.Combine(Settings.InputPath, glSpec), Delegates, "gl"); SpecReader.ReadDelegates(Path.Combine(Settings.InputPath, glSpec), Delegates, Profile);
SpecReader.ReadDelegates(Path.Combine(Settings.InputPath, glSpec), Delegates, "glcore");
SpecReader.ReadDelegates(overrides, Delegates, ""); SpecReader.ReadDelegates(overrides, Delegates, "");
var enum_processor = new EnumProcessor(overrides); var enum_processor = new EnumProcessor(overrides);

View file

@ -162,9 +162,12 @@ namespace Bind
switch (mode) switch (mode)
{ {
case GeneratorMode.GL3:
case GeneratorMode.GL2: case GeneratorMode.GL2:
Generator = new GL4Generator("OpenGL", dirName); Generator = new Generator("OpenGL", dirName);
break;
case GeneratorMode.GL3:
Generator = new GL4Generator("OpenGL.Core", dirName);
break; break;
case GeneratorMode.ES10: case GeneratorMode.ES10: