[Bind] Process documentation from subdirectories

Instead of using xslt, we now process the documentation in code. This
allows us to fix mismatches from e.g. invalid parameter names that
sometimes creep in the specs.
This commit is contained in:
thefiddler 2014-03-28 20:08:38 +01:00
parent 22a706e44f
commit 67b0ead68b
13 changed files with 198 additions and 920 deletions

View file

@ -299,29 +299,29 @@ namespace Bind
if (!docfiles.ContainsKey(docfile)) if (!docfiles.ContainsKey(docfile))
docfile = Settings.FunctionPrefix + f.TrimmedName.TrimEnd(numbers) + ".xml"; docfile = Settings.FunctionPrefix + f.TrimmedName.TrimEnd(numbers) + ".xml";
var docs = new List<string>(); Documentation docs =
if (docfiles.ContainsKey(docfile)) (docfiles.ContainsKey(docfile) ?
{ Processor.ProcessFile(docfiles[docfile]) :
docs.AddRange(Processor.ProcessFile(docfiles[docfile])); null) ??
} new Documentation
if (docs.Count == 0) {
{ Summary = String.Empty,
docs.Add("/// <summary></summary>"); Parameters = f.Parameters.Select(p =>
} new KeyValuePair<string, string>(p.Name, String.Empty)).ToList()
};
int summary_start = docs[0].IndexOf("<summary>") + "<summary>".Length;
string warning = "[deprecated: v{0}]"; string warning = "[deprecated: v{0}]";
string category = "[requires: {0}]"; string category = "[requires: {0}]";
if (f.Deprecated) if (f.Deprecated)
{ {
warning = String.Format(warning, f.DeprecatedVersion); warning = String.Format(warning, f.DeprecatedVersion);
docs[0] = docs[0].Insert(summary_start, warning); docs.Summary = docs.Summary.Insert(0, warning);
} }
if (f.Extension != "Core" && !String.IsNullOrEmpty(f.Category)) if (f.Extension != "Core" && !String.IsNullOrEmpty(f.Category))
{ {
category = String.Format(category, f.Category); category = String.Format(category, f.Category);
docs[0] = docs[0].Insert(summary_start, category); docs.Summary = docs.Summary.Insert(0, category);
} }
else if (!String.IsNullOrEmpty(f.Version)) else if (!String.IsNullOrEmpty(f.Version))
{ {
@ -329,22 +329,23 @@ namespace Bind
category = String.Format(category, "v" + f.Version); category = String.Format(category, "v" + f.Version);
else else
category = String.Format(category, "v" + f.Version + " and " + f.Category); category = String.Format(category, "v" + f.Version + " and " + f.Category);
docs[0] = docs[0].Insert(summary_start, category); docs.Summary = docs.Summary.Insert(0, category);
} }
foreach (var param in f.WrappedDelegate.Parameters) for (int i = 0; i < f.Parameters.Count; i++)
{ {
var index = docs.IndexOf("/// <param name=\"" + param.Name +"\">"); var param = f.Parameters[i];
if (index != -1 && param.ComputeSize != "") if (!String.IsNullOrEmpty(param.ComputeSize))
{ {
var compute_size = string.Format("[length: {0}]", param.ComputeSize); docs.Parameters[i].Value.Insert(0,
docs[index] = docs[index] + compute_size; String.Format("[length: {0}]", param.ComputeSize));
} }
} }
foreach (var doc in docs) sw.WriteLine("/// <summary>{0}</summary>", docs.Summary);
foreach (var p in docs.Parameters)
{ {
sw.WriteLine(doc); sw.WriteLine("/// <param name=\"{0}\">{1}</param>", p.Key, p.Value);
} }
} }
catch (Exception e) catch (Exception e)

View file

@ -696,29 +696,28 @@ typedef const char* GLstring;
if (!docfiles.ContainsKey(docfile)) if (!docfiles.ContainsKey(docfile))
docfile = Settings.FunctionPrefix + f.TrimmedName.TrimEnd(numbers) + ".xml"; docfile = Settings.FunctionPrefix + f.TrimmedName.TrimEnd(numbers) + ".xml";
var docs = new List<string>(); Documentation docs =
if (docfiles.ContainsKey(docfile)) (docfiles.ContainsKey(docfile) ?
{ Processor.ProcessFile(docfiles[docfile]) : null) ??
docs.AddRange(Processor.ProcessFile(docfiles[docfile])); new Documentation
} {
if (docs.Count == 0) Summary = String.Empty,
{ Parameters = f.Parameters.Select(p =>
docs.Add("/// <summary></summary>"); new KeyValuePair<string, string>(p.Name, String.Empty)).ToList()
} };
int summary_start = docs[0].IndexOf("<summary>") + "<summary>".Length;
string warning = "[deprecated: v{0}]"; string warning = "[deprecated: v{0}]";
string category = "[requires: {0}]"; string category = "[requires: {0}]";
if (f.Deprecated) if (f.Deprecated)
{ {
warning = String.Format(warning, f.DeprecatedVersion); warning = String.Format(warning, f.DeprecatedVersion);
docs[0] = docs[0].Insert(summary_start, warning); docs.Summary = docs.Summary.Insert(0, warning);
} }
if (f.Extension != "Core" && !String.IsNullOrEmpty(f.Category)) if (f.Extension != "Core" && !String.IsNullOrEmpty(f.Category))
{ {
category = String.Format(category, f.Category); category = String.Format(category, f.Category);
docs[0] = docs[0].Insert(summary_start, category); docs.Summary = docs.Summary.Insert(0, category);
} }
else if (!String.IsNullOrEmpty(f.Version)) else if (!String.IsNullOrEmpty(f.Version))
{ {
@ -726,12 +725,26 @@ typedef const char* GLstring;
category = String.Format(category, "v" + f.Version); category = String.Format(category, "v" + f.Version);
else else
category = String.Format(category, "v" + f.Version + " and " + f.Category); category = String.Format(category, "v" + f.Version + " and " + f.Category);
docs[0] = docs[0].Insert(summary_start, category); docs.Summary = docs.Summary.Insert(0, category);
} }
foreach (var doc in docs) for (int i = 0; i < f.WrappedDelegate.Parameters.Count; i++)
{ {
sw.WriteLine(doc); var param = f.WrappedDelegate.Parameters[i];
if (param.ComputeSize != String.Empty)
{
docs.Parameters[i].Value.Insert(0,
String.Format("[length: {0}]", param.ComputeSize));
}
}
sw.Write("/// \brief ");
sw.WriteLine(docs.Summary);
foreach (var p in docs.Parameters)
{
sw.Write(@"/// \param ");
sw.Write(p.Key);
sw.WriteLine(p.Value);
} }
} }
catch (Exception e) catch (Exception e)

View file

@ -1,9 +1,17 @@
using System; using System;
using System.Collections;
using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Xml; using System.Xml;
using System.Xml.Linq;
using System.Xml.XPath;
using System.Xml.Xsl; using System.Xml.Xsl;
using Bind.Structures;
namespace Bind namespace Bind
{ {
class DocProcessor class DocProcessor
@ -15,11 +23,20 @@ namespace Bind
static readonly XslCompiledTransform xslt = new XslCompiledTransform(); static readonly XslCompiledTransform xslt = new XslCompiledTransform();
static readonly XmlReaderSettings settings = new XmlReaderSettings(); static readonly XmlReaderSettings settings = new XmlReaderSettings();
string[] Text; Documentation Cached;
string LastFile; string LastFile;
public DocProcessor(string transform_file) public DocProcessor(string transform_file)
{ {
if (!File.Exists(transform_file))
{
// If no specific transform file exists
// get the generic transform file from
// the parent directory
var dir = Directory.GetParent(Path.GetDirectoryName(transform_file)).FullName;
var file = Path.GetFileName(transform_file);
transform_file = Path.Combine(dir, file);
}
xslt.Load(transform_file); xslt.Load(transform_file);
settings.ProhibitDtd = false; settings.ProhibitDtd = false;
settings.XmlResolver = null; settings.XmlResolver = null;
@ -29,16 +46,22 @@ namespace Bind
// found in the <!-- eqn: :--> comments in the docs. // found in the <!-- eqn: :--> comments in the docs.
// Todo: Some simple MathML tags do not include comments, find a solution. // Todo: Some simple MathML tags do not include comments, find a solution.
// Todo: Some files include more than 1 function - find a way to map these extra functions. // Todo: Some files include more than 1 function - find a way to map these extra functions.
public string[] ProcessFile(string file) public Documentation ProcessFile(string file)
{ {
string text; string text;
if (LastFile == file) if (LastFile == file)
return Text; return Cached;
LastFile = file; LastFile = file;
text = File.ReadAllText(file); text = File.ReadAllText(file);
text = text
.Replace("xml:", String.Empty) // Remove namespaces
.Replace("&epsi;", "epsilon") // Fix unrecognized &epsi; entities
.Replace("<constant>", "<c>") // Improve output
.Replace("</constant>", "</c>");
Match m = remove_mathml.Match(text); Match m = remove_mathml.Match(text);
while (m.Length > 0) while (m.Length > 0)
{ {
@ -69,34 +92,42 @@ namespace Bind
m = remove_mathml.Match(text); m = remove_mathml.Match(text);
} }
XmlReader doc = null; //XmlReader doc = null;
XDocument doc = null;
try try
{ {
// The pure XmlReader is ~20x faster than the XmlTextReader. // The pure XmlReader is ~20x faster than the XmlTextReader.
doc = XmlReader.Create(new StringReader(text), settings); //doc = XmlReader.Create(new StringReader(text), settings);
//doc = new XmlTextReader(new StringReader(text)); doc = XDocument.Parse(text);
Cached = ToInlineDocs(doc);
using (StringWriter sw = new StringWriter()) return Cached;
{
xslt.Transform(doc, null, sw);
Text = sw.ToString().Split(new char[] { '\r', '\n' },
StringSplitOptions.RemoveEmptyEntries);
// Remove unecessary whitespace
// Indentation is handled by BindStreamWriter
for (int i = 0; i < Text.Length; i++)
{
Text[i] = Text[i].Trim();
}
return Text;
}
} }
catch (XmlException e) catch (XmlException e)
{ {
Console.WriteLine(e.ToString()); Console.WriteLine(e.ToString());
Console.WriteLine(doc.ToString()); Console.WriteLine(doc.ToString());
return new string[0]; return null;
} }
} }
Documentation ToInlineDocs(XDocument doc)
{
var inline = new Documentation
{
Summary =
((IEnumerable)doc.XPathEvaluate("//*[name()='refentry']/*[name()='refnamediv']/*[name()='refpurpose']"))
.Cast<XElement>().First().Value.Trim(),
Parameters =
((IEnumerable)doc.XPathEvaluate("*[name()='refentry']/*[name()='refsect1'][@id='parameters']/*[name()='variablelist']/*[name()='varlistentry']"))
.Cast<XNode>()
.Select(p => new KeyValuePair<string, string>(
p.XPathSelectElement("*[name()='term']/*[name()='parameter']").Value.Trim(),
p.XPathSelectElement("*[name()='listitem']").Value.Trim()))
.ToList()
};
inline.Summary = Char.ToUpper(inline.Summary[0]) + inline.Summary.Substring(1);
return inline;
}
} }
} }

View file

@ -10,7 +10,7 @@ using Enum=Bind.Structures.Enum;
namespace Bind.ES namespace Bind.ES
{ {
// Generation implementation for OpenGL ES 2.0 and 3.0 // Generation implementation for OpenGL ES 2.0 and 3.0
class ES2Generator : ESGenerator class ES2Generator : Generator
{ {
public ES2Generator(Settings settings, string dirName) public ES2Generator(Settings settings, string dirName)
: base(settings, dirName) : base(settings, dirName)
@ -22,9 +22,17 @@ namespace Bind.ES
Settings.DefaultDelegatesFile = "ES20Delegates.cs"; Settings.DefaultDelegatesFile = "ES20Delegates.cs";
Settings.DefaultEnumsFile = "ES20Enums.cs"; Settings.DefaultEnumsFile = "ES20Enums.cs";
Settings.DefaultWrappersFile = "ES20.cs"; Settings.DefaultWrappersFile = "ES20.cs";
Settings.DefaultDocPath = Path.Combine(
Settings.DefaultDocPath, "ES20");
Profile = "gles2"; Profile = "gles2";
Version = "2.0"; Version = "2.0";
// For compatibility with OpenTK 1.0 and Xamarin, generate
// overloads using the "All" enum in addition to strongly-typed enums.
// This can be disabled by passing "-o:-keep_untyped_enums" as a cmdline parameter.
Settings.DefaultCompatibility |= Settings.Legacy.KeepUntypedEnums;
Settings.DefaultCompatibility |= Settings.Legacy.UseDllImports;
} }
} }
} }

View file

@ -10,7 +10,7 @@ using Enum=Bind.Structures.Enum;
namespace Bind.ES namespace Bind.ES
{ {
// Generation implementation for OpenGL ES 3.0 // Generation implementation for OpenGL ES 3.0
class ES3Generator : ESGenerator class ES3Generator : Generator
{ {
public ES3Generator(Settings settings, string dirName) public ES3Generator(Settings settings, string dirName)
: base(settings, dirName) : base(settings, dirName)
@ -22,9 +22,17 @@ namespace Bind.ES
Settings.DefaultDelegatesFile = "ES30Delegates.cs"; Settings.DefaultDelegatesFile = "ES30Delegates.cs";
Settings.DefaultEnumsFile = "ES30Enums.cs"; Settings.DefaultEnumsFile = "ES30Enums.cs";
Settings.DefaultWrappersFile = "ES30.cs"; Settings.DefaultWrappersFile = "ES30.cs";
Settings.DefaultDocPath = Path.Combine(
Settings.DefaultDocPath, "ES30");
Profile = "gles2"; // The 3.0 spec reuses the gles2 apiname Profile = "gles2"; // The 3.0 spec reuses the gles2 apiname
Version = "2.0|3.0"; Version = "2.0|3.0";
// For compatibility with OpenTK 1.0 and Xamarin, generate
// overloads using the "All" enum in addition to strongly-typed enums.
// This can be disabled by passing "-o:-keep_untyped_enums" as a cmdline parameter.
Settings.DefaultCompatibility |= Settings.Legacy.KeepUntypedEnums;
Settings.DefaultCompatibility |= Settings.Legacy.UseDllImports;
} }
} }
} }

View file

@ -22,6 +22,8 @@ namespace Bind.ES
Settings.DefaultDelegatesFile = "ES11Delegates.cs"; Settings.DefaultDelegatesFile = "ES11Delegates.cs";
Settings.DefaultEnumsFile = "ES11Enums.cs"; Settings.DefaultEnumsFile = "ES11Enums.cs";
Settings.DefaultWrappersFile = "ES11.cs"; Settings.DefaultWrappersFile = "ES11.cs";
Settings.DefaultDocPath = Path.Combine(
Settings.DefaultDocPath, "ES20"); // no ES11 docbook sources available
// Khronos releases a combined 1.0+1.1 specification, // Khronos releases a combined 1.0+1.1 specification,
// so we cannot distinguish between the two. // so we cannot distinguish between the two.

View file

@ -45,6 +45,8 @@ namespace Bind.GL2
Settings.DefaultDelegatesFile = "GL4Delegates.cs"; Settings.DefaultDelegatesFile = "GL4Delegates.cs";
Settings.DefaultEnumsFile = "GL4Enums.cs"; Settings.DefaultEnumsFile = "GL4Enums.cs";
Settings.DefaultWrappersFile = "GL4.cs"; Settings.DefaultWrappersFile = "GL4.cs";
Settings.DefaultDocPath = Path.Combine(
Settings.DefaultDocPath, "GL4");
Profile = "glcore"; Profile = "glcore";
} }

View file

@ -18,7 +18,7 @@ using Type=Bind.Structures.Type;
namespace Bind.GL2 namespace Bind.GL2
{ {
class Generator : IBind abstract class Generator : IBind
{ {
#region Fields #region Fields
@ -82,22 +82,6 @@ namespace Bind.GL2
Settings.DelegatesClass = "Delegates"; Settings.DelegatesClass = "Delegates";
Settings.OutputClass = "GL"; Settings.OutputClass = "GL";
if (Settings.Compatibility == Settings.Legacy.Tao)
{
Settings.OutputNamespace = "Tao.OpenGl";
Settings.OutputClass = "Gl";
}
else
{
// Defaults
}
Settings.DefaultOutputNamespace = "OpenTK.Graphics.OpenGL";
Settings.DefaultImportsFile = "GLCore.cs";
Settings.DefaultDelegatesFile = "GLDelegates.cs";
Settings.DefaultEnumsFile = "GLEnums.cs";
Settings.DefaultWrappersFile = "GL.cs";
Delegates = new DelegateCollection(); Delegates = new DelegateCollection();
Enums = new EnumCollection(); Enums = new EnumCollection();
Wrappers = new FunctionCollection(); Wrappers = new FunctionCollection();

View file

@ -55,6 +55,7 @@
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<DebugType>full</DebugType> <DebugType>full</DebugType>
<Commandlineparameters>-mode:es30</Commandlineparameters>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<BaseAddress>285212672</BaseAddress> <BaseAddress>285212672</BaseAddress>
@ -227,680 +228,6 @@
</None> </None>
<None Include="Specifications\ES20\overrides.xml"> <None Include="Specifications\ES20\overrides.xml">
</None> </None>
<None Include="Specifications\Docs\glIsTexture.xml">
</None>
<None Include="Specifications\Docs\glXCreatePixmap.xml">
</None>
<None Include="Specifications\Docs\glViewport.xml">
</None>
<None Include="Specifications\Docs\glXDestroyContext.xml">
</None>
<None Include="Specifications\Docs\gluGetTessProperty.xml">
</None>
<None Include="Specifications\Docs\glEvalPoint.xml">
</None>
<None Include="Specifications\Docs\gluPerspective.xml">
</None>
<None Include="Specifications\Docs\glXDestroyPbuffer.xml">
</None>
<None Include="Specifications\Docs\glGetTexGen.xml">
</None>
<None Include="Specifications\Docs\glVertexPointer.xml">
</None>
<None Include="Specifications\Docs\glBlendFuncSeparate.xml">
</None>
<None Include="Specifications\Docs\glNormalPointer.xml">
</None>
<None Include="Specifications\Docs\glGetShader.xml">
</None>
<None Include="Specifications\Docs\gluBeginPolygon.xml">
</None>
<None Include="Specifications\Docs\glIsQuery.xml">
</None>
<None Include="Specifications\Docs\glResetHistogram.xml">
</None>
<None Include="Specifications\Docs\glXQueryExtensionsString.xml">
</None>
<None Include="Specifications\Docs\glLoadTransposeMatrix.xml">
</None>
<None Include="Specifications\Docs\glCompressedTexImage2D.xml">
</None>
<None Include="Specifications\Docs\glTexImage2D.xml">
</None>
<None Include="Specifications\Docs\glStencilOpSeparate.xml">
</None>
<None Include="Specifications\Docs\glDrawBuffer.xml">
</None>
<None Include="Specifications\Docs\glEdgeFlagPointer.xml">
</None>
<None Include="Specifications\Docs\glTexCoord.xml">
</None>
<None Include="Specifications\Docs\glMultiDrawElements.xml">
</None>
<None Include="Specifications\Docs\glEnableVertexAttribArray.xml">
</None>
<None Include="Specifications\Docs\glXGetProcAddress.xml">
</None>
<None Include="Specifications\Docs\glGenBuffers.xml">
</None>
<None Include="Specifications\Docs\glXFreeContextEXT.xml">
</None>
<None Include="Specifications\Docs\glFlush.xml">
</None>
<None Include="Specifications\Docs\glClearStencil.xml">
</None>
<None Include="Specifications\Docs\gluNextContour.xml">
</None>
<None Include="Specifications\Docs\glListBase.xml">
</None>
<None Include="Specifications\Docs\glGetColorTableParameter.xml">
</None>
<None Include="Specifications\Docs\glMapBuffer.xml">
</None>
<None Include="Specifications\Docs\glXDestroyGLXPixmap.xml">
</None>
<None Include="Specifications\Docs\glDrawElements.xml">
</None>
<None Include="Specifications\Docs\glPushMatrix.xml">
</None>
<None Include="Specifications\Docs\glVertexAttribPointer.xml">
</None>
<None Include="Specifications\Docs\glMultMatrix.xml">
</None>
<None Include="Specifications\Docs\glXGetClientString.xml">
</None>
<None Include="Specifications\Docs\glXGetContextIDEXT.xml">
</None>
<None Include="Specifications\Docs\gluLookAt.xml">
</None>
<None Include="Specifications\Docs\gluBuild3DMipmapLevels.xml">
</None>
<None Include="Specifications\Docs\glDrawRangeElements.xml">
</None>
<None Include="Specifications\Docs\glXGetFBConfigAttrib.xml">
</None>
<None Include="Specifications\Docs\glValidateProgram.xml">
</None>
<None Include="Specifications\Docs\glGetMap.xml">
</None>
<None Include="Specifications\Docs\glUniform.xml">
</None>
<None Include="Specifications\Docs\gluPwlCurve.xml">
</None>
<None Include="Specifications\Docs\glGetPointerv.xml">
</None>
<None Include="Specifications\Docs\glXDestroyPixmap.xml">
</None>
<None Include="Specifications\Docs\gluUnProject.xml">
</None>
<None Include="Specifications\Docs\glPrioritizeTextures.xml">
</None>
<None Include="Specifications\Docs\glCompressedTexSubImage2D.xml">
</None>
<None Include="Specifications\Docs\glGetQueryObject.xml">
</None>
<None Include="Specifications\Docs\glXCreateGLXPixmap.xml">
</None>
<None Include="Specifications\Docs\glBufferSubData.xml">
</None>
<None Include="Specifications\Docs\glClearDepth.xml">
</None>
<None Include="Specifications\Docs\glGetUniform.xml">
</None>
<None Include="Specifications\Docs\glEnable.xml">
</None>
<None Include="Specifications\Docs\glCopyColorTable.xml">
</None>
<None Include="Specifications\Docs\glTexImage1D.xml">
</None>
<None Include="Specifications\Docs\glPushClientAttrib.xml">
</None>
<None Include="Specifications\Docs\glBindBuffer.xml">
</None>
<None Include="Specifications\Docs\glEdgeFlag.xml">
</None>
<None Include="Specifications\Docs\gluDeleteTess.xml">
</None>
<None Include="Specifications\Docs\glVertexAttrib.xml">
</None>
<None Include="Specifications\Docs\glFog.xml">
</None>
<None Include="Specifications\Docs\glBeginQuery.xml">
</None>
<None Include="Specifications\Docs\glDrawPixels.xml">
</None>
<None Include="Specifications\Docs\glGetSeparableFilter.xml">
</None>
<None Include="Specifications\Docs\glGetConvolutionFilter.xml">
</None>
<None Include="Specifications\Docs\glXGetCurrentReadDrawable.xml">
</None>
<None Include="Specifications\Docs\glShaderSource.xml">
</None>
<None Include="Specifications\Docs\glPolygonOffset.xml">
</None>
<None Include="Specifications\Docs\glPushAttrib.xml">
</None>
<None Include="Specifications\Docs\glXQueryDrawable.xml">
</None>
<None Include="Specifications\Docs\glGetMinmax.xml">
</None>
<None Include="Specifications\Docs\gluScaleImage.xml">
</None>
<None Include="Specifications\Docs\glLineWidth.xml">
</None>
<None Include="Specifications\Docs\glRotate.xml">
</None>
<None Include="Specifications\Docs\glLight.xml">
</None>
<None Include="Specifications\Docs\glSelectBuffer.xml">
</None>
<None Include="Specifications\Docs\glFogCoord.xml">
</None>
<None Include="Specifications\Docs\glXGetSelectedEvent.xml">
</None>
<None Include="Specifications\Docs\glStencilMask.xml">
</None>
<None Include="Specifications\Docs\gluBuild2DMipmapLevels.xml">
</None>
<None Include="Specifications\Docs\glDepthRange.xml">
</None>
<None Include="Specifications\Docs\glReadBuffer.xml">
</None>
<None Include="Specifications\Docs\glDeleteBuffers.xml">
</None>
<None Include="Specifications\Docs\glGetBufferPointerv.xml">
</None>
<None Include="Specifications\Docs\glClearColor.xml">
</None>
<None Include="Specifications\Docs\glIsBuffer.xml">
</None>
<None Include="Specifications\Docs\glTexSubImage1D.xml">
</None>
<None Include="Specifications\Docs\glXGetCurrentContext.xml">
</None>
<None Include="Specifications\Docs\glIsList.xml">
</None>
<None Include="Specifications\Docs\glBlendEquation.xml">
</None>
<None Include="Specifications\Docs\glHint.xml">
</None>
<None Include="Specifications\Docs\glVertex.xml">
</None>
<None Include="Specifications\Docs\glTexSubImage3D.xml">
</None>
<None Include="Specifications\Docs\glCopyColorSubTable.xml">
</None>
<None Include="Specifications\Docs\gluNurbsCallback.xml">
</None>
<None Include="Specifications\Docs\gluNewQuadric.xml">
</None>
<None Include="Specifications\Docs\glUseProgram.xml">
</None>
<None Include="Specifications\Docs\glCullFace.xml">
</None>
<None Include="Specifications\Docs\glXGetCurrentDisplay.xml">
</None>
<None Include="Specifications\Docs\glSecondaryColor.xml">
</None>
<None Include="Specifications\Docs\glStencilFuncSeparate.xml">
</None>
<None Include="Specifications\Docs\gluPickMatrix.xml">
</None>
<None Include="Specifications\Docs\glGetTexParameter.xml">
</None>
<None Include="Specifications\Docs\glPixelZoom.xml">
</None>
<None Include="Specifications\Docs\gluBeginSurface.xml">
</None>
<None Include="Specifications\Docs\glGetVertexAttribPointerv.xml">
</None>
<None Include="Specifications\Docs\glClearAccum.xml">
</None>
<None Include="Specifications\Docs\glPushName.xml">
</None>
<None Include="Specifications\Docs\gluQuadricCallback.xml">
</None>
<None Include="Specifications\Docs\glCompileShader.xml">
</None>
<None Include="Specifications\Docs\gluDisk.xml">
</None>
<None Include="Specifications\Docs\gluCylinder.xml">
</None>
<None Include="Specifications\Docs\glBlendEquationSeparate.xml">
</None>
<None Include="Specifications\Docs\glPassThrough.xml">
</None>
<None Include="Specifications\Docs\glConvolutionFilter2D.xml">
</None>
<None Include="Specifications\Docs\glStencilOp.xml">
</None>
<None Include="Specifications\Docs\glScale.xml">
</None>
<None Include="Specifications\Docs\glXCreateWindow.xml">
</None>
<None Include="Specifications\Docs\glFogCoordPointer.xml">
</None>
<None Include="Specifications\Docs\glWindowPos.xml">
</None>
<None Include="Specifications\Docs\gluQuadricTexture.xml">
</None>
<None Include="Specifications\Docs\glAreTexturesResident.xml">
</None>
<None Include="Specifications\Docs\glXDestroyWindow.xml">
</None>
<None Include="Specifications\Docs\gluTessCallback.xml">
</None>
<None Include="Specifications\Docs\glDrawArrays.xml">
</None>
<None Include="Specifications\Docs\glMinmax.xml">
</None>
<None Include="Specifications\Docs\glArrayElement.xml">
</None>
<None Include="Specifications\Docs\glReadPixels.xml">
</None>
<None Include="Specifications\Docs\glGetLight.xml">
</None>
<None Include="Specifications\Docs\glTexEnv.xml">
</None>
<None Include="Specifications\Docs\glGetBufferParameteriv.xml">
</None>
<None Include="Specifications\Docs\glFrontFace.xml">
</None>
<None Include="Specifications\Docs\glCopyPixels.xml">
</None>
<None Include="Specifications\Docs\glXWaitX.xml">
</None>
<None Include="Specifications\Docs\glXQueryContext.xml">
</None>
<None Include="Specifications\Docs\gluTessEndPolygon.xml">
</None>
<None Include="Specifications\Docs\glEvalCoord.xml">
</None>
<None Include="Specifications\Docs\glLightModel.xml">
</None>
<None Include="Specifications\Docs\glXIsDirect.xml">
</None>
<None Include="Specifications\Docs\glMultiTexCoord.xml">
</None>
<None Include="Specifications\Docs\glXUseXFont.xml">
</None>
<None Include="Specifications\Docs\glBindAttribLocation.xml">
</None>
<None Include="Specifications\Docs\glTexImage3D.xml">
</None>
<None Include="Specifications\Docs\gluQuadricNormals.xml">
</None>
<None Include="Specifications\Docs\glClipPlane.xml">
</None>
<None Include="Specifications\Docs\glIndexPointer.xml">
</None>
<None Include="Specifications\Docs\glGetPixelMap.xml">
</None>
<None Include="Specifications\Docs\glXCreateContext.xml">
</None>
<None Include="Specifications\Docs\glCreateProgram.xml">
</None>
<None Include="Specifications\Docs\glCallLists.xml">
</None>
<None Include="Specifications\Docs\glTexCoordPointer.xml">
</None>
<None Include="Specifications\Docs\gluDeleteNurbsRenderer.xml">
</None>
<None Include="Specifications\Docs\glLogicOp.xml">
</None>
<None Include="Specifications\Docs\glLoadMatrix.xml">
</None>
<None Include="Specifications\Docs\glXIntro.xml">
</None>
<None Include="Specifications\Docs\gluBuild1DMipmaps.xml">
</None>
<None Include="Specifications\Docs\glIsProgram.xml">
</None>
<None Include="Specifications\Docs\glShadeModel.xml">
</None>
<None Include="Specifications\Docs\glBlendColor.xml">
</None>
<None Include="Specifications\Docs\glCallList.xml">
</None>
<None Include="Specifications\Docs\glBegin.xml">
</None>
<None Include="Specifications\Docs\glRenderMode.xml">
</None>
<None Include="Specifications\Docs\glXQueryVersion.xml">
</None>
<None Include="Specifications\Docs\glPolygonStipple.xml">
</None>
<None Include="Specifications\Docs\glDeleteQueries.xml">
</None>
<None Include="Specifications\Docs\glGetTexLevelParameter.xml">
</None>
<None Include="Specifications\Docs\glGetColorTable.xml">
</None>
<None Include="Specifications\Docs\gluBuild2DMipmaps.xml">
</None>
<None Include="Specifications\Docs\glColor.xml">
</None>
<None Include="Specifications\Docs\glAttachShader.xml">
</None>
<None Include="Specifications\Docs\glXGetVisualFromFBConfig.xml">
</None>
<None Include="Specifications\Docs\glXCreateNewContext.xml">
</None>
<None Include="Specifications\Docs\glBindTexture.xml">
</None>
<None Include="Specifications\Docs\glLoadName.xml">
</None>
<None Include="Specifications\Docs\glGenLists.xml">
</None>
<None Include="Specifications\Docs\gluNurbsProperty.xml">
</None>
<None Include="Specifications\Docs\glColorMask.xml">
</None>
<None Include="Specifications\Docs\glBufferData.xml">
</None>
<None Include="Specifications\Docs\gluQuadricDrawStyle.xml">
</None>
<None Include="Specifications\Docs\glGetActiveUniform.xml">
</None>
<None Include="Specifications\Docs\glSampleCoverage.xml">
</None>
<None Include="Specifications\Docs\glFeedbackBuffer.xml">
</None>
<None Include="Specifications\Docs\glCopyTexImage1D.xml">
</None>
<None Include="Specifications\Docs\glGetMaterial.xml">
</None>
<None Include="Specifications\Docs\glNewList.xml">
</None>
<None Include="Specifications\Docs\glNormal.xml">
</None>
<None Include="Specifications\Docs\glPointSize.xml">
</None>
<None Include="Specifications\Docs\glGenQueries.xml">
</None>
<None Include="Specifications\Docs\gluTessProperty.xml">
</None>
<None Include="Specifications\Docs\glIsShader.xml">
</None>
<None Include="Specifications\Docs\gluGetString.xml">
</None>
<None Include="Specifications\Docs\glTexGen.xml">
</None>
<None Include="Specifications\Docs\glDepthMask.xml">
</None>
<None Include="Specifications\Docs\glGetProgramInfoLog.xml">
</None>
<None Include="Specifications\Docs\gluOrtho2D.xml">
</None>
<None Include="Specifications\Docs\glXChooseFBConfig.xml">
</None>
<None Include="Specifications\Docs\glSeparableFilter2D.xml">
</None>
<None Include="Specifications\Docs\glDeleteProgram.xml">
</None>
<None Include="Specifications\Docs\gluErrorString.xml">
</None>
<None Include="Specifications\Docs\gluNewTess.xml">
</None>
<None Include="Specifications\Docs\gluUnProject4.xml">
</None>
<None Include="Specifications\Docs\glXChooseVisual.xml">
</None>
<None Include="Specifications\Docs\glGetHistogram.xml">
</None>
<None Include="Specifications\Docs\glEnableClientState.xml">
</None>
<None Include="Specifications\Docs\gluNewNurbsRenderer.xml">
</None>
<None Include="Specifications\Docs\glXGetFBConfigs.xml">
</None>
<None Include="Specifications\Docs\glXSwapBuffers.xml">
</None>
<None Include="Specifications\Docs\glBitmap.xml">
</None>
<None Include="Specifications\Docs\glLineStipple.xml">
</None>
<None Include="Specifications\Docs\glGetCompressedTexImage.xml">
</None>
<None Include="Specifications\Docs\gluBeginTrim.xml">
</None>
<None Include="Specifications\Docs\glCopyConvolutionFilter1D.xml">
</None>
<None Include="Specifications\Docs\glCreateShader.xml">
</None>
<None Include="Specifications\Docs\glGetHistogramParameter.xml">
</None>
<None Include="Specifications\Docs\gluQuadricOrientation.xml">
</None>
<None Include="Specifications\Docs\glFinish.xml">
</None>
<None Include="Specifications\Docs\glXQueryExtension.xml">
</None>
<None Include="Specifications\Docs\glGetString.xml">
</None>
<None Include="Specifications\Docs\glCompressedTexImage3D.xml">
</None>
<None Include="Specifications\Docs\glStencilFunc.xml">
</None>
<None Include="Specifications\Docs\glGetShaderSource.xml">
</None>
<None Include="Specifications\Docs\gluPartialDisk.xml">
</None>
<None Include="Specifications\Docs\glColorMaterial.xml">
</None>
<None Include="Specifications\Docs\glGetAttribLocation.xml">
</None>
<None Include="Specifications\Docs\glGetPolygonStipple.xml">
</None>
<None Include="Specifications\Docs\glScissor.xml">
</None>
<None Include="Specifications\Docs\gluTessBeginContour.xml">
</None>
<None Include="Specifications\Docs\glGetMinmaxParameter.xml">
</None>
<None Include="Specifications\Docs\glClientActiveTexture.xml">
</None>
<None Include="Specifications\Docs\glCopyTexSubImage2D.xml">
</None>
<None Include="Specifications\Docs\gluProject.xml">
</None>
<None Include="Specifications\Docs\glDeleteTextures.xml">
</None>
<None Include="Specifications\Docs\gluGetNurbsProperty.xml">
</None>
<None Include="Specifications\Docs\glResetMinmax.xml">
</None>
<None Include="Specifications\Docs\glMapGrid.xml">
</None>
<None Include="Specifications\Docs\gluSphere.xml">
</None>
<None Include="Specifications\Docs\glActiveTexture.xml">
</None>
<None Include="Specifications\Docs\glXWaitGL.xml">
</None>
<None Include="Specifications\Docs\glGet.xml">
</None>
<None Include="Specifications\Docs\glDepthFunc.xml">
</None>
<None Include="Specifications\Docs\glMap2.xml">
</None>
<None Include="Specifications\Docs\gluTessVertex.xml">
</None>
<None Include="Specifications\Docs\glBlendFunc.xml">
</None>
<None Include="Specifications\Docs\glMultTransposeMatrix.xml">
</None>
<None Include="Specifications\Docs\glMultiDrawArrays.xml">
</None>
<None Include="Specifications\Docs\glColorTableParameter.xml">
</None>
<None Include="Specifications\Docs\glXMakeContextCurrent.xml">
</None>
<None Include="Specifications\Docs\glPointParameter.xml">
</None>
<None Include="Specifications\Docs\glMaterial.xml">
</None>
<None Include="Specifications\Docs\glColorSubTable.xml">
</None>
<None Include="Specifications\Docs\glGetQueryiv.xml">
</None>
<None Include="Specifications\Docs\glCopyConvolutionFilter2D.xml">
</None>
<None Include="Specifications\Docs\glXCreatePbuffer.xml">
</None>
<None Include="Specifications\Docs\glClearIndex.xml">
</None>
<None Include="Specifications\Docs\gluTessBeginPolygon.xml">
</None>
<None Include="Specifications\Docs\gluBuild1DMipmapLevels.xml">
</None>
<None Include="Specifications\Docs\glXGetCurrentDrawable.xml">
</None>
<None Include="Specifications\Docs\glLinkProgram.xml">
</None>
<None Include="Specifications\Docs\gluNurbsCallbackDataEXT.xml">
</None>
<None Include="Specifications\Docs\glXQueryServerString.xml">
</None>
<None Include="Specifications\Docs\gluNurbsCallbackData.xml">
</None>
<None Include="Specifications\Docs\glClear.xml">
</None>
<None Include="Specifications\Docs\glTexSubImage2D.xml">
</None>
<None Include="Specifications\Docs\glColorPointer.xml">
</None>
<None Include="Specifications\Docs\gluBuild3DMipmaps.xml">
</None>
<None Include="Specifications\Docs\glGetActiveAttrib.xml">
</None>
<None Include="Specifications\Docs\glGetTexEnv.xml">
</None>
<None Include="Specifications\Docs\glCompressedTexImage1D.xml">
</None>
<None Include="Specifications\Docs\glConvolutionFilter1D.xml">
</None>
<None Include="Specifications\Docs\glXGetConfig.xml">
</None>
<None Include="Specifications\Docs\glCompressedTexSubImage1D.xml">
</None>
<None Include="Specifications\Docs\glAccum.xml">
</None>
<None Include="Specifications\Docs\glPolygonMode.xml">
</None>
<None Include="Specifications\Docs\gluCheckExtension.xml">
</None>
<None Include="Specifications\Docs\glGetVertexAttrib.xml">
</None>
<None Include="Specifications\Docs\glXImportContextEXT.xml">
</None>
<None Include="Specifications\Docs\glPixelMap.xml">
</None>
<None Include="Specifications\Docs\glGetShaderInfoLog.xml">
</None>
<None Include="Specifications\Docs\glStencilMaskSeparate.xml">
</None>
<None Include="Specifications\Docs\glTranslate.xml">
</None>
<None Include="Specifications\Docs\glMap1.xml">
</None>
<None Include="Specifications\Docs\glCopyTexSubImage1D.xml">
</None>
<None Include="Specifications\Docs\glColorTable.xml">
</None>
<None Include="Specifications\Docs\gluNurbsSurface.xml">
</None>
<None Include="Specifications\Docs\glDeleteLists.xml">
</None>
<None Include="Specifications\Docs\glRect.xml">
</None>
<None Include="Specifications\Docs\glSecondaryColorPointer.xml">
</None>
<None Include="Specifications\Docs\glEvalMesh.xml">
</None>
<None Include="Specifications\Docs\glXSelectEvent.xml">
</None>
<None Include="Specifications\Docs\glPixelStore.xml">
</None>
<None Include="Specifications\Docs\glGenTextures.xml">
</None>
<None Include="Specifications\Docs\gluDeleteQuadric.xml">
</None>
<None Include="Specifications\Docs\glXCopyContext.xml">
</None>
<None Include="Specifications\Docs\glGetBufferSubData.xml">
</None>
<None Include="Specifications\Docs\glGetClipPlane.xml">
</None>
<None Include="Specifications\Docs\glGetTexImage.xml">
</None>
<None Include="Specifications\Docs\glCopyTexImage2D.xml">
</None>
<None Include="Specifications\Docs\glGetConvolutionParameter.xml">
</None>
<None Include="Specifications\Docs\glXQueryContextInfoEXT.xml">
</None>
<None Include="Specifications\Docs\glPixelTransfer.xml">
</None>
<None Include="Specifications\Docs\glRasterPos.xml">
</None>
<None Include="Specifications\Docs\glDrawBuffers.xml">
</None>
<None Include="Specifications\Docs\glLoadIdentity.xml">
</None>
<None Include="Specifications\Docs\glCopyTexSubImage3D.xml">
</None>
<None Include="Specifications\Docs\gluBeginCurve.xml">
</None>
<None Include="Specifications\Docs\glXMakeCurrent.xml">
</None>
<None Include="Specifications\Docs\glIsEnabled.xml">
</None>
<None Include="Specifications\Docs\gluTessNormal.xml">
</None>
<None Include="Specifications\Docs\glGetAttachedShaders.xml">
</None>
<None Include="Specifications\Docs\glFrustum.xml">
</None>
<None Include="Specifications\Docs\gluLoadSamplingMatrices.xml">
</None>
<None Include="Specifications\Docs\glMatrixMode.xml">
</None>
<None Include="Specifications\Docs\glGetUniformLocation.xml">
</None>
<None Include="Specifications\Docs\glGetProgram.xml">
</None>
<None Include="Specifications\Docs\glHistogram.xml">
</None>
<None Include="Specifications\Docs\glConvolutionParameter.xml">
</None>
<None Include="Specifications\Docs\glInterleavedArrays.xml">
</None>
<None Include="Specifications\Docs\glCompressedTexSubImage3D.xml">
</None>
<None Include="Specifications\Docs\glGetError.xml">
</None>
<None Include="Specifications\Docs\glDeleteShader.xml">
</None>
<None Include="Specifications\Docs\glAlphaFunc.xml">
</None>
<None Include="Specifications\Docs\glOrtho.xml">
</None>
<None Include="Specifications\Docs\glDetachShader.xml">
</None>
<None Include="Specifications\Docs\gluNurbsCurve.xml">
</None>
<None Include="Specifications\Docs\glInitNames.xml">
</None>
<None Include="Specifications\Docs\glIndexMask.xml">
</None>
<None Include="Specifications\Docs\glTexParameter.xml">
</None>
<None Include="Specifications\Docs\glIndex.xml">
</None>
<None Include="Specifications\Docs\ToInlineDocs.xslt">
</None>
<None Include="Documentation\todo.txt"> <None Include="Documentation\todo.txt">
</None> </None>
<None Include="Documentation\changelog.txt"> <None Include="Documentation\changelog.txt">
@ -914,124 +241,10 @@
<Compile Include="ES\ES3Generator.cs"> <Compile Include="ES\ES3Generator.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="GL2\GL2Generator.cs" />
<Compile Include="Structures\Documentation.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="Specifications\Docs\glActiveShaderProgram.xml" />
<None Include="Specifications\Docs\glBeginConditionalRender.xml" />
<None Include="Specifications\Docs\glBeginQueryIndexed.xml" />
<None Include="Specifications\Docs\glBeginTransformFeedback.xml" />
<None Include="Specifications\Docs\glBindBufferBase.xml" />
<None Include="Specifications\Docs\glBindBufferRange.xml" />
<None Include="Specifications\Docs\glBindFragDataLocation.xml" />
<None Include="Specifications\Docs\glBindFragDataLocationIndexed.xml" />
<None Include="Specifications\Docs\glBindFramebuffer.xml" />
<None Include="Specifications\Docs\glBindProgramPipeline.xml" />
<None Include="Specifications\Docs\glBindRenderbuffer.xml" />
<None Include="Specifications\Docs\glBindSampler.xml" />
<None Include="Specifications\Docs\glBindTransformFeedback.xml" />
<None Include="Specifications\Docs\glBindVertexArray.xml" />
<None Include="Specifications\Docs\glBlitFramebuffer.xml" />
<None Include="Specifications\Docs\glCheckFramebufferStatus.xml" />
<None Include="Specifications\Docs\glClampColor.xml" />
<None Include="Specifications\Docs\glClearBuffer.xml" />
<None Include="Specifications\Docs\glClientWaitSync.xml" />
<None Include="Specifications\Docs\glCopyBufferSubData.xml" />
<None Include="Specifications\Docs\glCreateShaderProgram.xml" />
<None Include="Specifications\Docs\glDeleteFramebuffers.xml" />
<None Include="Specifications\Docs\glDeleteProgramPipelines.xml" />
<None Include="Specifications\Docs\glDeleteRenderbuffers.xml" />
<None Include="Specifications\Docs\glDeleteSamplers.xml" />
<None Include="Specifications\Docs\glDeleteSync.xml" />
<None Include="Specifications\Docs\glDeleteTransformFeedbacks.xml" />
<None Include="Specifications\Docs\glDeleteVertexArrays.xml" />
<None Include="Specifications\Docs\glDepthRangeArray.xml" />
<None Include="Specifications\Docs\glDepthRangeIndexed.xml" />
<None Include="Specifications\Docs\glDrawArraysIndirect.xml" />
<None Include="Specifications\Docs\glDrawArraysInstanced.xml" />
<None Include="Specifications\Docs\glDrawElementsBaseVertex.xml" />
<None Include="Specifications\Docs\glDrawElementsIndirect.xml" />
<None Include="Specifications\Docs\glDrawElementsInstanced.xml" />
<None Include="Specifications\Docs\glDrawElementsInstancedBaseVertex.xml" />
<None Include="Specifications\Docs\glDrawRangeElementsBaseVertex.xml" />
<None Include="Specifications\Docs\glDrawTransformFeedback.xml" />
<None Include="Specifications\Docs\glDrawTransformFeedbackStream.xml" />
<None Include="Specifications\Docs\glFenceSync.xml" />
<None Include="Specifications\Docs\glFlushMappedBufferRange.xml" />
<None Include="Specifications\Docs\glFramebufferRenderbuffer.xml" />
<None Include="Specifications\Docs\glFramebufferTexture.xml" />
<None Include="Specifications\Docs\glFramebufferTextureFace.xml" />
<None Include="Specifications\Docs\glFramebufferTextureLayer.xml" />
<None Include="Specifications\Docs\glGenerateMipmap.xml" />
<None Include="Specifications\Docs\glGenFramebuffers.xml" />
<None Include="Specifications\Docs\glGenProgramPipelines.xml" />
<None Include="Specifications\Docs\glGenRenderbuffers.xml" />
<None Include="Specifications\Docs\glGenSamplers.xml" />
<None Include="Specifications\Docs\glGenTransformFeedbacks.xml" />
<None Include="Specifications\Docs\glGenVertexArrays.xml" />
<None Include="Specifications\Docs\glGetActiveSubroutineName.xml" />
<None Include="Specifications\Docs\glGetActiveSubroutineUniform.xml" />
<None Include="Specifications\Docs\glGetActiveSubroutineUniformName.xml" />
<None Include="Specifications\Docs\glGetActiveUniformBlock.xml" />
<None Include="Specifications\Docs\glGetActiveUniformBlockName.xml" />
<None Include="Specifications\Docs\glGetActiveUniformName.xml" />
<None Include="Specifications\Docs\glGetBufferParameter.xml" />
<None Include="Specifications\Docs\glGetFragDataIndex.xml" />
<None Include="Specifications\Docs\glGetFragDataLocation.xml" />
<None Include="Specifications\Docs\glGetFramebufferAttachmentParameter.xml" />
<None Include="Specifications\Docs\glGetMultisample.xml" />
<None Include="Specifications\Docs\glGetProgramBinary.xml" />
<None Include="Specifications\Docs\glGetProgramPipeline.xml" />
<None Include="Specifications\Docs\glGetProgramPipelineInfoLog.xml" />
<None Include="Specifications\Docs\glGetProgramStage.xml" />
<None Include="Specifications\Docs\glGetQueryIndexed.xml" />
<None Include="Specifications\Docs\glGetRenderbufferParameter.xml" />
<None Include="Specifications\Docs\glGetSamplerParameter.xml" />
<None Include="Specifications\Docs\glGetShaderPrecisionFormat.xml" />
<None Include="Specifications\Docs\glGetSubroutineIndex.xml" />
<None Include="Specifications\Docs\glGetSubroutineUniformLocation.xml" />
<None Include="Specifications\Docs\glGetSync.xml" />
<None Include="Specifications\Docs\glGetTransformFeedbackVarying.xml" />
<None Include="Specifications\Docs\glGetUniformBlockIndex.xml" />
<None Include="Specifications\Docs\glGetUniformIndices.xml" />
<None Include="Specifications\Docs\glGetUniformSubroutine.xml" />
<None Include="Specifications\Docs\glIsFramebuffer.xml" />
<None Include="Specifications\Docs\glIsProgramPipeline.xml" />
<None Include="Specifications\Docs\glIsRenderbuffer.xml" />
<None Include="Specifications\Docs\glIsSampler.xml" />
<None Include="Specifications\Docs\glIsSync.xml" />
<None Include="Specifications\Docs\glIsTransformFeedback.xml" />
<None Include="Specifications\Docs\glIsVertexArray.xml" />
<None Include="Specifications\Docs\glMapBufferRange.xml" />
<None Include="Specifications\Docs\glMultiDrawElementsBaseVertex.xml" />
<None Include="Specifications\Docs\glPatchParameter.xml" />
<None Include="Specifications\Docs\glPauseTransformFeedback.xml" />
<None Include="Specifications\Docs\glPrimitiveRestartIndex.xml" />
<None Include="Specifications\Docs\glProgramBinary.xml" />
<None Include="Specifications\Docs\glProgramParameter.xml" />
<None Include="Specifications\Docs\glProgramUniform.xml" />
<None Include="Specifications\Docs\glProvokingVertex.xml" />
<None Include="Specifications\Docs\glQueryCounter.xml" />
<None Include="Specifications\Docs\glReleaseShaderCompiler.xml" />
<None Include="Specifications\Docs\glRenderbufferStorage.xml" />
<None Include="Specifications\Docs\glRenderbufferStorageMultisample.xml" />
<None Include="Specifications\Docs\glResumeTransformFeedback.xml" />
<None Include="Specifications\Docs\glSampleMaski.xml" />
<None Include="Specifications\Docs\glSamplerParameter.xml" />
<None Include="Specifications\Docs\glScissorArray.xml" />
<None Include="Specifications\Docs\glScissorIndexed.xml" />
<None Include="Specifications\Docs\glShaderBinary.xml" />
<None Include="Specifications\Docs\glTexBuffer.xml" />
<None Include="Specifications\Docs\glTexImage2DMultisample.xml" />
<None Include="Specifications\Docs\glTexImage3DMultisample.xml" />
<None Include="Specifications\Docs\glTransformFeedbackVaryings.xml" />
<None Include="Specifications\Docs\glUniformBlockBinding.xml" />
<None Include="Specifications\Docs\glUniformSubroutines.xml" />
<None Include="Specifications\Docs\glUseProgramStages.xml" />
<None Include="Specifications\Docs\glValidateProgramPipeline.xml" />
<None Include="Specifications\Docs\glVertexAttribDivisor.xml" />
<None Include="Specifications\Docs\glViewportArray.xml" />
<None Include="Specifications\Docs\glViewportIndexed.xml" />
<None Include="Specifications\Docs\glWaitSync.xml" />
<None Include="Specifications\GL2\signatures.xml"> <None Include="Specifications\GL2\signatures.xml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
</None> </None>
@ -1057,4 +270,7 @@
</Properties> </Properties>
</MonoDevelop> </MonoDevelop>
</ProjectExtensions> </ProjectExtensions>
<ItemGroup>
<Folder Include="Specifications\Docs\" />
</ItemGroup>
</Project> </Project>

View file

@ -347,29 +347,28 @@ namespace Bind
if (!docfiles.ContainsKey(docfile)) if (!docfiles.ContainsKey(docfile))
docfile = Settings.FunctionPrefix + f.TrimmedName.TrimEnd(numbers) + ".xml"; docfile = Settings.FunctionPrefix + f.TrimmedName.TrimEnd(numbers) + ".xml";
var docs = new List<string>(); Documentation docs =
if (docfiles.ContainsKey(docfile)) (docfiles.ContainsKey(docfile) ?
Processor.ProcessFile(docfiles[docfile]) : null) ??
new Documentation
{ {
docs.AddRange(Processor.ProcessFile(docfiles[docfile])); Summary = String.Empty,
} Parameters = f.Parameters.Select(p =>
if (docs.Count == 0) new KeyValuePair<string, string>(p.Name, String.Empty)).ToList()
{ };
docs.Add("/// <summary></summary>");
}
int summary_start = docs[0].IndexOf("<summary>") + "<summary>".Length;
string warning = "[deprecated: v{0}]"; string warning = "[deprecated: v{0}]";
string category = "[requires: {0}]"; string category = "[requires: {0}]";
if (f.Deprecated) if (f.Deprecated)
{ {
warning = String.Format(warning, f.DeprecatedVersion); warning = String.Format(warning, f.DeprecatedVersion);
docs[0] = docs[0].Insert(summary_start, warning); docs.Summary = docs.Summary.Insert(0, warning);
} }
if (f.Extension != "Core" && !String.IsNullOrEmpty(f.Category)) if (f.Extension != "Core" && !String.IsNullOrEmpty(f.Category))
{ {
category = String.Format(category, f.Category); category = String.Format(category, f.Category);
docs[0] = docs[0].Insert(summary_start, category); docs.Summary = docs.Summary.Insert(0, category);
} }
else if (!String.IsNullOrEmpty(f.Version)) else if (!String.IsNullOrEmpty(f.Version))
{ {
@ -377,12 +376,23 @@ namespace Bind
category = String.Format(category, "v" + f.Version); category = String.Format(category, "v" + f.Version);
else else
category = String.Format(category, "v" + f.Version + " and " + f.Category); category = String.Format(category, "v" + f.Version + " and " + f.Category);
docs[0] = docs[0].Insert(summary_start, category); docs.Summary = docs.Summary.Insert(0, category);
} }
foreach (var doc in docs) for (int i = 0; i < f.WrappedDelegate.Parameters.Count; i++)
{ {
sw.WriteLine(doc); var param = f.WrappedDelegate.Parameters[i];
if (param.ComputeSize != String.Empty)
{
docs.Parameters[i].Value.Insert(0,
String.Format("[length: {0}]", param.ComputeSize));
}
}
sw.WriteLine("/// <summary>{0}</summary>", docs.Summary);
foreach (var p in docs.Parameters)
{
sw.WriteLine("/// <param name=\"{0}\">{1}</param>", p.Key, p.Value);
} }
} }
catch (Exception e) catch (Exception e)

View file

@ -187,7 +187,7 @@ namespace Bind
case GeneratorMode.All: case GeneratorMode.All:
Console.WriteLine("Using 'all' generator mode."); Console.WriteLine("Using 'all' generator mode.");
Console.WriteLine("Use '-mode:all/gl2/gl4/es10/es11/es20/es30' to select a specific mode."); Console.WriteLine("Use '-mode:all/gl2/gl4/es10/es11/es20/es30' to select a specific mode.");
Generators.Add(new Generator(Settings, dirName)); Generators.Add(new GL2Generator(Settings, dirName));
Generators.Add(new GL4Generator(Settings, dirName)); Generators.Add(new GL4Generator(Settings, dirName));
Generators.Add(new ESGenerator(Settings, dirName)); Generators.Add(new ESGenerator(Settings, dirName));
Generators.Add(new ES2Generator(Settings, dirName)); Generators.Add(new ES2Generator(Settings, dirName));
@ -195,7 +195,7 @@ namespace Bind
break; break;
case GeneratorMode.GL2: case GeneratorMode.GL2:
Generators.Add(new Generator(Settings, dirName)); Generators.Add(new GL2Generator(Settings, dirName));
break; break;
case GeneratorMode.GL3: case GeneratorMode.GL3:

View file

@ -1,38 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'"/>
<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
<xsl:template name ="summary" match="refentry">
/// <summary>
/// <xsl:value-of select="concat(translate(
substring(refnamediv/refpurpose, 1, 1), $lowercase, $uppercase),
substring(refnamediv/refpurpose, 2, string-length(refnamediv/refpurpose) - 1))"/>
/// </summary>
<xsl:for-each select="refsect1/variablelist/varlistentry">
<xsl:choose>
<xsl:when test="../../@id = 'parameters'">
/// <param name="{term/parameter}">
<xsl:for-each select="listitem/para">
/// <para>
/// <xsl:value-of select="normalize-space(.)"/>
/// </para>
</xsl:for-each>
/// </param>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,41 @@
#region License
//
// Documentation.cs
//
// Author:
// Stefanos A. <stapostol@gmail.com>
//
// Copyright (c) 2006-2014 Stefanos Apostolopoulos
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
namespace Bind.Structures
{
public class Documentation
{
public string Summary { get; set; }
public List<KeyValuePair<string, string>> Parameters { get; set; }
}
}