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. 40
      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 @@ @@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using CppSharp.AST;
namespace CppSharp.Generators
@ -78,8 +79,19 @@ namespace CppSharp.Generators @@ -78,8 +79,19 @@ namespace CppSharp.Generators
if (templates.Count == 0)
continue;
foreach (var template in templates)
template.Process();
if (templates.Count == 1)
{
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
{

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

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

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

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

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

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

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

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

14
src/Generator/Generators/Template.cs

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

4
src/Generator/Options.cs

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

Loading…
Cancel
Save