Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 59 additions & 0 deletions CodeGen/Generators/NanoFrameworkGen/NuspecGenerator.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
using System;
using System.Collections.Generic;
using System.Text;
using CodeGen.JsonTypes;

namespace CodeGen.Generators.NanoFrameworkGen
{
class NuspecGenerator : GeneratorBase
{
private readonly Quantity _quantity;
private string _mathNuGetVersion;

public NuspecGenerator(Quantity quantity, string mathNuGetVersion)
{
_quantity = quantity ?? throw new ArgumentNullException(nameof(quantity));
_mathNuGetVersion = mathNuGetVersion;
}

public override string Generate()
{
Writer.WL($@"<?xml version=""1.0"" encoding=""utf-8""?>
<package xmlns=""http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd"">
<metadata>
<id>UnitsNet.nanoFramework.{_quantity.Name}</id>
<version>4.92.2</version>
<title>Units.NET {_quantity.Name} - nanoFramework</title>
<authors>Andreas Gullberg Larsen,nanoFramework project contributors</authors>
<owners>UnitsNet</owners>
<license type=""expression"">MIT</license>
<projectUrl>https://github.com/angularsen/UnitsNet</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Adds {_quantity.Name} units for Units.NET on .NET nanoFramework. For .NET or .NET Core, use UnitsNet instead.</description>
<iconUrl>https://raw.githubusercontent.com/angularsen/UnitsNet/ce85185429be345d77eb2ce09c99d59cc9ab8aed/Docs/Images/logo-32.png</iconUrl>
<releaseNotes>
</releaseNotes>
<copyright>Copyright 2013 Andreas Gullberg Larsen (andreas.larsen84@gmail.com).</copyright>
<language>en-US</language>
<tags>nanoframework unit units measurement si metric imperial abbreviation abbreviations convert conversion parse c# .net immutable uwp uap winrt win10 windows runtime component {_quantity.Name.ToLower()}</tags>
<dependencies>
<dependency id=""nanoFramework.CoreLibrary"" version=""1.10.4-preview.11"" />");

if(NanoFrameworkGenerator.ProjectsRequiringMath.Contains(_quantity.Name))
{
Writer.WL($@"
<dependency id=""nanoFramework.System.Math"" version=""{_mathNuGetVersion}"" />");
}

Writer.WL($@"
</dependencies>
</metadata>
<files>
<file src=""..\..\..\Artifacts\UnitsNet.NanoFramework\{_quantity.Name}\UnitsNet.*"" target=""lib"" />
</files>
</package>");

return Writer.ToString();
}
}
}
40 changes: 29 additions & 11 deletions CodeGen/Generators/NanoFrameworkGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -108,23 +108,34 @@ public static void Generate(string rootDir, Quantity[] quantities)
int numberQuantity = 0;
foreach (var quantity in quantities)
{
// Skip decimal based units, they are not supported by nanoFramework
if (quantity.BaseType == "decimal")
{
Log.Information($"Skipping {quantity.Name} as it's decimal based");
continue;
}

Log.Information($"Creating .NET nanoFramework project for {quantity.Name}");

var projectPath = Path.Combine(outputDir, quantity.Name);
Directory.CreateDirectory(projectPath);
var sb = new StringBuilder($"{quantity.Name}:".PadRight(AlignPad));

GeneratePackage(projectPath, quantity.Name);
GeneratePackageConfig(projectPath, quantity.Name);
GenerateNuspec(projectPath, quantity, MathNuGetVersion);
GenerateUnitType(sb, quantity, Path.Combine(outputUnits, $"{quantity.Name}Unit.g.cs"));
GenerateQuantity(sb, quantity, Path.Combine(outputQuantitites, $"{quantity.Name}.g.cs"));
GenerateProject(sb, quantity, projectPath);


// Convert decimal based units to floats; decimals are not supported by nanoFramework
if (quantity.BaseType == "decimal")
{
var replacements = new Dictionary<string, string>
{
//{ "(\\)sdecimal(\\s)", "$1float$2" }
{ "(\\d)m", "$1d" },
{ "(\\d)M", "$1d" },
{ " decimal ", " double " },
{ "(decimal ", "(double " }
};
new FileInfo($"{outputDir}\\Units\\{quantity.Name}Unit.g.cs").EditFile(replacements);
new FileInfo($"{outputDir}\\Quantities\\{quantity.Name}.g.cs").EditFile(replacements);
}

numberQuantity++;
}

Expand All @@ -133,11 +144,18 @@ public static void Generate(string rootDir, Quantity[] quantities)
Log.Information($"Count of generated projects: {numberQuantity}");
}

private static void GeneratePackage(string projectPath, string quantityName)
private static void GeneratePackageConfig(string projectPath, string quantityName)
{
string filePath = Path.Combine(projectPath, "packages.config");

var content = Generate(quantityName);
var content = GeneratePackageConfigFile(quantityName);
File.WriteAllText(filePath, content, Encoding.UTF8);
}
private static void GenerateNuspec(string projectPath, Quantity quantity, string mathNuGetVersion)
{
string filePath = Path.Combine(projectPath, $"UnitsNet.NanoFramework.{quantity.Name}.nuspec");

var content = new NuspecGenerator(quantity, mathNuGetVersion).Generate();
File.WriteAllText(filePath, content, Encoding.UTF8);
}

Expand Down Expand Up @@ -185,7 +203,7 @@ private static void GenerateSolution(Quantity[] quantities, string outputDir)
File.WriteAllText(filePath, content, Encoding.UTF8);
}

private static string Generate(string quantityName)
private static string GeneratePackageConfigFile(string quantityName)
{
MyTextWriter Writer = new MyTextWriter();

Expand Down
58 changes: 58 additions & 0 deletions CodeGen/Helpers/FileInfoExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace CodeGen.Helpers
{
internal static class FileInfoExtensions
{
private static readonly string[] RegexHints = { ".*", "^", "\\s", "\\d" };

public static void EditFile(
this FileInfo sourceFile,
Dictionary<string, string> replacements)
{
var tempFilename = $"{sourceFile.FullName}.edited";
using (var input = sourceFile.OpenText())
using (var output = new StreamWriter(tempFilename))
{
string line;
while (null != (line = input.ReadLine()))
{
// Replacing longer matches first is a safeguard heuristic.
// It ensures we don't accidentally replace "List<int>"
// before "IList<int>", which would break "IList<int>" replacement.
foreach (var (key, value) in replacements.OrderByDescending(r => r.Key.Length))
{
if (line.Contains(key))
{
line = line.Replace(key, value);
}
try
{
if (RegexHints.Any(regexHint => key.Contains(regexHint)))
{
line = Regex.Replace(line, key, value);
}
}
catch (RegexParseException) { }
}

// Make sure all line endings on Windows are CRLF.
// This is important for opening .nfproj flies in Visual Studio,
// and maybe for some other files too.
line = line.Replace("\r", "").Replace("\n", Environment.NewLine);

output.WriteLine(line);
}
}

sourceFile.Delete();
new FileInfo(tempFilename).MoveTo(sourceFile.FullName);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>UnitsNet.nanoFramework.Acceleration</id>
<version>4.92.2</version>
<title>Units.NET Acceleration - nanoFramework</title>
<authors>Andreas Gullberg Larsen,nanoFramework project contributors</authors>
<owners>UnitsNet</owners>
<license type="expression">MIT</license>
<projectUrl>https://github.com/angularsen/UnitsNet</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Adds Acceleration units for Units.NET on .NET nanoFramework. For .NET or .NET Core, use UnitsNet instead.</description>
<iconUrl>https://raw.githubusercontent.com/angularsen/UnitsNet/ce85185429be345d77eb2ce09c99d59cc9ab8aed/Docs/Images/logo-32.png</iconUrl>
<releaseNotes>
</releaseNotes>
<copyright>Copyright 2013 Andreas Gullberg Larsen (andreas.larsen84@gmail.com).</copyright>
<language>en-US</language>
<tags>nanoframework unit units measurement si metric imperial abbreviation abbreviations convert conversion parse c# .net immutable uwp uap winrt win10 windows runtime component acceleration</tags>
<dependencies>
<dependency id="nanoFramework.CoreLibrary" version="1.10.4-preview.11" />
</dependencies>
</metadata>
<files>
<file src="..\..\..\Artifacts\UnitsNet.NanoFramework\Acceleration\UnitsNet.*" target="lib" />
</files>
</package>
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>UnitsNet.nanoFramework.AmountOfSubstance</id>
<version>4.92.2</version>
<title>Units.NET AmountOfSubstance - nanoFramework</title>
<authors>Andreas Gullberg Larsen,nanoFramework project contributors</authors>
<owners>UnitsNet</owners>
<license type="expression">MIT</license>
<projectUrl>https://github.com/angularsen/UnitsNet</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Adds AmountOfSubstance units for Units.NET on .NET nanoFramework. For .NET or .NET Core, use UnitsNet instead.</description>
<iconUrl>https://raw.githubusercontent.com/angularsen/UnitsNet/ce85185429be345d77eb2ce09c99d59cc9ab8aed/Docs/Images/logo-32.png</iconUrl>
<releaseNotes>
</releaseNotes>
<copyright>Copyright 2013 Andreas Gullberg Larsen (andreas.larsen84@gmail.com).</copyright>
<language>en-US</language>
<tags>nanoframework unit units measurement si metric imperial abbreviation abbreviations convert conversion parse c# .net immutable uwp uap winrt win10 windows runtime component amountofsubstance</tags>
<dependencies>
<dependency id="nanoFramework.CoreLibrary" version="1.10.4-preview.11" />
</dependencies>
</metadata>
<files>
<file src="..\..\..\Artifacts\UnitsNet.NanoFramework\AmountOfSubstance\UnitsNet.*" target="lib" />
</files>
</package>
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>UnitsNet.nanoFramework.AmplitudeRatio</id>
<version>4.92.2</version>
<title>Units.NET AmplitudeRatio - nanoFramework</title>
<authors>Andreas Gullberg Larsen,nanoFramework project contributors</authors>
<owners>UnitsNet</owners>
<license type="expression">MIT</license>
<projectUrl>https://github.com/angularsen/UnitsNet</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Adds AmplitudeRatio units for Units.NET on .NET nanoFramework. For .NET or .NET Core, use UnitsNet instead.</description>
<iconUrl>https://raw.githubusercontent.com/angularsen/UnitsNet/ce85185429be345d77eb2ce09c99d59cc9ab8aed/Docs/Images/logo-32.png</iconUrl>
<releaseNotes>
</releaseNotes>
<copyright>Copyright 2013 Andreas Gullberg Larsen (andreas.larsen84@gmail.com).</copyright>
<language>en-US</language>
<tags>nanoframework unit units measurement si metric imperial abbreviation abbreviations convert conversion parse c# .net immutable uwp uap winrt win10 windows runtime component amplituderatio</tags>
<dependencies>
<dependency id="nanoFramework.CoreLibrary" version="1.10.4-preview.11" />
</dependencies>
</metadata>
<files>
<file src="..\..\..\Artifacts\UnitsNet.NanoFramework\AmplitudeRatio\UnitsNet.*" target="lib" />
</files>
</package>
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>UnitsNet.nanoFramework.Angle</id>
<version>4.92.2</version>
<title>Units.NET Angle - nanoFramework</title>
<authors>Andreas Gullberg Larsen,nanoFramework project contributors</authors>
<owners>UnitsNet</owners>
<license type="expression">MIT</license>
<projectUrl>https://github.com/angularsen/UnitsNet</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Adds Angle units for Units.NET on .NET nanoFramework. For .NET or .NET Core, use UnitsNet instead.</description>
<iconUrl>https://raw.githubusercontent.com/angularsen/UnitsNet/ce85185429be345d77eb2ce09c99d59cc9ab8aed/Docs/Images/logo-32.png</iconUrl>
<releaseNotes>
</releaseNotes>
<copyright>Copyright 2013 Andreas Gullberg Larsen (andreas.larsen84@gmail.com).</copyright>
<language>en-US</language>
<tags>nanoframework unit units measurement si metric imperial abbreviation abbreviations convert conversion parse c# .net immutable uwp uap winrt win10 windows runtime component angle</tags>
<dependencies>
<dependency id="nanoFramework.CoreLibrary" version="1.10.4-preview.11" />
<dependency id="nanoFramework.System.Math" version="1.4.0-preview.1" />
</dependencies>
</metadata>
<files>
<file src="..\..\..\Artifacts\UnitsNet.NanoFramework\Angle\UnitsNet.*" target="lib" />
</files>
</package>
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>UnitsNet.nanoFramework.ApparentEnergy</id>
<version>4.92.2</version>
<title>Units.NET ApparentEnergy - nanoFramework</title>
<authors>Andreas Gullberg Larsen,nanoFramework project contributors</authors>
<owners>UnitsNet</owners>
<license type="expression">MIT</license>
<projectUrl>https://github.com/angularsen/UnitsNet</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Adds ApparentEnergy units for Units.NET on .NET nanoFramework. For .NET or .NET Core, use UnitsNet instead.</description>
<iconUrl>https://raw.githubusercontent.com/angularsen/UnitsNet/ce85185429be345d77eb2ce09c99d59cc9ab8aed/Docs/Images/logo-32.png</iconUrl>
<releaseNotes>
</releaseNotes>
<copyright>Copyright 2013 Andreas Gullberg Larsen (andreas.larsen84@gmail.com).</copyright>
<language>en-US</language>
<tags>nanoframework unit units measurement si metric imperial abbreviation abbreviations convert conversion parse c# .net immutable uwp uap winrt win10 windows runtime component apparentenergy</tags>
<dependencies>
<dependency id="nanoFramework.CoreLibrary" version="1.10.4-preview.11" />
</dependencies>
</metadata>
<files>
<file src="..\..\..\Artifacts\UnitsNet.NanoFramework\ApparentEnergy\UnitsNet.*" target="lib" />
</files>
</package>
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>UnitsNet.nanoFramework.ApparentPower</id>
<version>4.92.2</version>
<title>Units.NET ApparentPower - nanoFramework</title>
<authors>Andreas Gullberg Larsen,nanoFramework project contributors</authors>
<owners>UnitsNet</owners>
<license type="expression">MIT</license>
<projectUrl>https://github.com/angularsen/UnitsNet</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Adds ApparentPower units for Units.NET on .NET nanoFramework. For .NET or .NET Core, use UnitsNet instead.</description>
<iconUrl>https://raw.githubusercontent.com/angularsen/UnitsNet/ce85185429be345d77eb2ce09c99d59cc9ab8aed/Docs/Images/logo-32.png</iconUrl>
<releaseNotes>
</releaseNotes>
<copyright>Copyright 2013 Andreas Gullberg Larsen (andreas.larsen84@gmail.com).</copyright>
<language>en-US</language>
<tags>nanoframework unit units measurement si metric imperial abbreviation abbreviations convert conversion parse c# .net immutable uwp uap winrt win10 windows runtime component apparentpower</tags>
<dependencies>
<dependency id="nanoFramework.CoreLibrary" version="1.10.4-preview.11" />
</dependencies>
</metadata>
<files>
<file src="..\..\..\Artifacts\UnitsNet.NanoFramework\ApparentPower\UnitsNet.*" target="lib" />
</files>
</package>
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>UnitsNet.nanoFramework.Area</id>
<version>4.92.2</version>
<title>Units.NET Area - nanoFramework</title>
<authors>Andreas Gullberg Larsen,nanoFramework project contributors</authors>
<owners>UnitsNet</owners>
<license type="expression">MIT</license>
<projectUrl>https://github.com/angularsen/UnitsNet</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Adds Area units for Units.NET on .NET nanoFramework. For .NET or .NET Core, use UnitsNet instead.</description>
<iconUrl>https://raw.githubusercontent.com/angularsen/UnitsNet/ce85185429be345d77eb2ce09c99d59cc9ab8aed/Docs/Images/logo-32.png</iconUrl>
<releaseNotes>
</releaseNotes>
<copyright>Copyright 2013 Andreas Gullberg Larsen (andreas.larsen84@gmail.com).</copyright>
<language>en-US</language>
<tags>nanoframework unit units measurement si metric imperial abbreviation abbreviations convert conversion parse c# .net immutable uwp uap winrt win10 windows runtime component area</tags>
<dependencies>
<dependency id="nanoFramework.CoreLibrary" version="1.10.4-preview.11" />
</dependencies>
</metadata>
<files>
<file src="..\..\..\Artifacts\UnitsNet.NanoFramework\Area\UnitsNet.*" target="lib" />
</files>
</package>
Loading