Browse Source

Merge pull request #274 from ddobrev/master

Added an option to generate a single source file per extension
pull/275/head
João Matos 11 years ago
parent
commit
9888895694
  1. 16
      src/Generator/Generator.cs
  2. 2
      src/Generator/Generators/CLI/CLIHeadersTemplate.cs
  3. 2
      src/Generator/Generators/CLI/CLISourcesTemplate.cs
  4. 2
      src/Generator/Generators/CLI/CLITextTemplate.cs
  5. 10
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs
  6. 14
      src/Generator/Generators/Template.cs
  7. 4
      src/Generator/Options.cs

16
src/Generator/Generator.cs

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using CppSharp.AST; using CppSharp.AST;
namespace CppSharp.Generators namespace CppSharp.Generators
@ -78,8 +79,19 @@ namespace CppSharp.Generators
if (templates.Count == 0) if (templates.Count == 0)
continue; continue;
foreach (var template in templates) if (templates.Count == 1)
template.Process(); {
templates[0].Process(Template.Order.First | Template.Order.Last);
}
else
{
templates.First().Process(Template.Order.First);
for (var i = 1; i < templates.Count - 1; i++)
{
templates[i].Process(Template.Order.InBetween);
}
templates.Last().Process(Template.Order.Last);
}
var output = new GeneratorOutput var output = new GeneratorOutput
{ {

2
src/Generator/Generators/CLI/CLIHeadersTemplate.cs

@ -20,7 +20,7 @@ namespace CppSharp.Generators.CLI
{ {
} }
public override void Process() public override void Process(Order order)
{ {
PushBlock(BlockKind.Header); PushBlock(BlockKind.Header);
PopBlock(); PopBlock();

2
src/Generator/Generators/CLI/CLISourcesTemplate.cs

@ -22,7 +22,7 @@ namespace CppSharp.Generators.CLI
} }
public override void Process() public override void Process(Order order)
{ {
PushBlock(BlockKind.Header); PushBlock(BlockKind.Header);
PopBlock(); PopBlock();

2
src/Generator/Generators/CLI/CLITextTemplate.cs

@ -70,7 +70,7 @@ namespace CppSharp.Generators.CLI
public abstract override string FileExtension { get; } public abstract override string FileExtension { get; }
public abstract override void Process(); public abstract override void Process(Order order);
#region Helpers #region Helpers

10
src/Generator/Generators/CSharp/CSharpTextTemplate.cs

@ -128,17 +128,19 @@ namespace CppSharp.Generators.CSharp
#endregion #endregion
public override void Process() public override void Process(Order order)
{ {
GenerateHeader(); GenerateHeader();
if (!Options.GenerateSingleCSharpFile || order.HasFlag(Order.First))
{
PushBlock(CSharpBlockKind.Usings); PushBlock(CSharpBlockKind.Usings);
WriteLine("using System;"); WriteLine("using System;");
WriteLine("using System.Runtime.InteropServices;"); WriteLine("using System.Runtime.InteropServices;");
WriteLine("using System.Security;"); WriteLine("using System.Security;");
foreach (var customUsingStatement in Options.DependentNameSpaces) foreach (var customUsingStatement in Options.DependentNameSpaces)
{ {
WriteLine(string.Format("using {0};", customUsingStatement));; WriteLine(string.Format("using {0};", customUsingStatement));
} }
PopBlock(NewLineKind.BeforeNextBlock); PopBlock(NewLineKind.BeforeNextBlock);
@ -148,15 +150,19 @@ namespace CppSharp.Generators.CSharp
WriteLine("namespace {0}", Driver.Options.OutputNamespace); WriteLine("namespace {0}", Driver.Options.OutputNamespace);
WriteStartBraceIndent(); WriteStartBraceIndent();
} }
}
GenerateDeclContext(TranslationUnit); GenerateDeclContext(TranslationUnit);
if (!Options.GenerateSingleCSharpFile || order.HasFlag(Order.Last))
{
if (Options.GenerateLibraryNamespace) if (Options.GenerateLibraryNamespace)
{ {
WriteCloseBraceIndent(); WriteCloseBraceIndent();
PopBlock(NewLineKind.BeforeNextBlock); PopBlock(NewLineKind.BeforeNextBlock);
} }
} }
}
public void GenerateHeader() public void GenerateHeader()
{ {

14
src/Generator/Generators/Template.cs

@ -31,7 +31,7 @@ namespace CppSharp.Generators
public NewLineKind NewLineKind { get; set; } public NewLineKind NewLineKind { get; set; }
public Block Parent { get; set; } public Block Parent { get; set; }
private List<Block> Blocks { get; set; } public List<Block> Blocks { get; set; }
public Declaration Declaration { get; set; } public Declaration Declaration { get; set; }
@ -247,6 +247,14 @@ namespace CppSharp.Generators
public abstract class Template : ITextGenerator public abstract class Template : ITextGenerator
{ {
[Flags]
public enum Order
{
First = 1,
InBetween = 2,
Last = 4
}
public Driver Driver { get; private set; } public Driver Driver { get; private set; }
public DriverOptions Options { get; private set; } public DriverOptions Options { get; private set; }
public TranslationUnit TranslationUnit { get; private set; } public TranslationUnit TranslationUnit { get; private set; }
@ -269,7 +277,7 @@ namespace CppSharp.Generators
ActiveBlock = RootBlock; ActiveBlock = RootBlock;
} }
public abstract void Process(); public abstract void Process(Order order);
public string Generate() public string Generate()
{ {
@ -313,7 +321,7 @@ namespace CppSharp.Generators
public Block FindBlock(int kind) public Block FindBlock(int kind)
{ {
return FindBlocks(kind).Single(); return FindBlocks(kind).SingleOrDefault();
} }
#endregion #endregion

4
src/Generator/Options.cs

@ -178,6 +178,10 @@ namespace CppSharp
public List<string> CodeFiles { get; private set; } public List<string> CodeFiles { get; private set; }
public readonly List<string> DependentNameSpaces = new List<string>(); public readonly List<string> DependentNameSpaces = new List<string>();
public bool MarshalCharAsManagedChar { get; set; } public bool MarshalCharAsManagedChar { get; set; }
/// <summary>
/// Generates a single C# file.
/// </summary>
public bool GenerateSingleCSharpFile { get; set; }
} }
public class InvalidOptionException : Exception public class InvalidOptionException : Exception

Loading…
Cancel
Save