Skip to content

Commit 48d304e

Browse files
committed
Merge pull request #34 from InitialForce/feature/NewTemplating
Replace T4 templates with PowerShell templates
2 parents 7553ff2 + c3acb6e commit 48d304e

File tree

133 files changed

+6978
-5359
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

133 files changed

+6978
-5359
lines changed

Src/.nuget/NuGet.Config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
2+
23
<configuration>
34
<solution>
45
<add key="disableSourceControlIntegration" value="true" />

Src/Scripts/GenerateUnits.ps1

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
function GetUnits($unitClass)
2+
{
3+
$units = @();
4+
5+
foreach ($unit in $unitClass.Units)
6+
{
7+
$units += $unit;
8+
$prefixIndex = 0;
9+
foreach ($prefix in $unit.Prefixes)
10+
{
11+
$prefixInfo = switch ($prefix)
12+
{
13+
"Kilo" { "k", "1e3"; break; }
14+
"Hecto" { "h", "1e2"; break; }
15+
"Deca" { "da", "1e1"; break; }
16+
"Deci" { "d", "1e-1"; break; }
17+
"Centi" { "c", "1e-2"; break; }
18+
"Milli" { "m", "1e-3"; break; }
19+
"Micro" { "μ", "1e-6"; break; }
20+
"Nano" { "n", "1e-9"; break; }
21+
22+
# Optimization, move less frequently used prefixes to the end
23+
"Pico" { "p", "1e-12"; break; }
24+
"Femto" { "f", "1e-15"; break; }
25+
"Atto" { "a", "1e-18"; break; }
26+
"Zepto" { "z", "1e-21"; break; }
27+
"Yocto" { "y", "1e-24"; break; }
28+
29+
"Yotta" { "Y", "1e24"; break; }
30+
"Zetta" { "Z", "1e21"; break; }
31+
"Exa" { "E", "1e18"; break; }
32+
"Peta" { "P", "1e15"; break; }
33+
"Tera" { "T", "1e12"; break; }
34+
"Giga" { "G", "1e9"; break; }
35+
"Mega" { "M", "1e6"; break; }
36+
37+
}
38+
39+
$prefixAbbreviation = $prefixInfo[0];
40+
$prefixFactor = $prefixInfo[1];
41+
42+
$u = New-Object PsObject -Property @{
43+
SingularName=$prefix+$unit.SingularName.ToLowerInvariant();
44+
PluralName=$prefix+$unit.PluralName.ToLowerInvariant();
45+
FromUnitToBaseFunc="("+$unit.FromUnitToBaseFunc+") * $prefixFactor";
46+
FromBaseToUnitFunc="("+$unit.FromBaseToUnitFunc+") / $prefixFactor";
47+
Localization=$unit.Localization | % {
48+
$abbrev = $prefixAbbreviation + $_.Abbreviations[0];
49+
if ($_.AbbreviationsWithPrefixes) {
50+
$abbrev = $_.AbbreviationsWithPrefixes[$prefixIndex++];
51+
}
52+
53+
New-Object PsObject -Property @{
54+
Culture=$_.Culture;
55+
Abbreviations= $abbrev;
56+
}};
57+
}
58+
59+
$units += $u;
60+
}
61+
}
62+
63+
return $units | sort SingularName;
64+
}
65+
66+
function GenerateUnitClass($unitClass)
67+
{
68+
Write-Host "Generate unit for: " + $unitClass.Name;
69+
70+
$outFileName = "$PSScriptRoot/../UnitsNet/GeneratedCode/UnitClasses/$($unitClass.Name).g.cs";
71+
GenerateUnitClassSourceCode $unitClass | Out-File -Encoding "UTF8" $outFileName
72+
}
73+
74+
function GenerateUnitTestClass($unitClass)
75+
{
76+
Write-Host "Generate test for: " + $unitClass.Name;
77+
78+
$outFileName = "$PSScriptRoot/../../Tests/GeneratedCode/$($unitClass.Name)TestsBase.g.cs";
79+
GenerateUnitTestClassSourceCode $unitClass | Out-File -Encoding "UTF8" $outFileName
80+
}
81+
82+
function GenerateUnitEnum($unitClass)
83+
{
84+
Write-Host "Generate unit enum for: " + $unitClass.Name;
85+
86+
$outDir = "$PSScriptRoot/../UnitsNet/GeneratedCode/Enums";
87+
$outFileName = "$outDir/$($unitClass.Name)Unit.g.cs";
88+
89+
New-Item -ItemType Directory -Force -Path $outDir; # Make sure directory exists
90+
91+
$result = GenerateUnitEnumSourceCode $unitClass;
92+
$result | Out-File -Encoding "UTF8" $outFileName;
93+
}
94+
95+
function GenerateUnitSystemDefault($unitClasses)
96+
{
97+
Write-Host "Generate UnitSystem.Default.g.cs.";
98+
99+
$outDir = "$PSScriptRoot/../UnitsNet/GeneratedCode";
100+
$outFileName = "$outDir/UnitSystem.Default.g.cs";
101+
102+
New-Item -ItemType Directory -Force -Path $outDir; # Make sure directory exists
103+
104+
$result = GenerateUnitSystemDefaultSourceCode $unitClasses;
105+
$result | Out-File -Encoding "UTF8" $outFileName;
106+
}
107+
108+
109+
110+
# Load external generator functions with same name as file
111+
. "$PSScriptRoot/Include-GenerateUnitSystemDefaultSourceCode.ps1"
112+
. "$PSScriptRoot/Include-GenerateUnitClassSourceCode.ps1"
113+
. "$PSScriptRoot/Include-GenerateUnitEnumSourceCode.ps1"
114+
. "$PSScriptRoot/Include-GenerateUnitTestClassSourceCode.ps1"
115+
116+
$templatesDir = "$PSScriptRoot/UnitDefinitions";
117+
$unitClasses = @();
118+
119+
get-childitem -path $templatesDir -filter "*.json" | % {
120+
$templateFile = $_.FullName
121+
$json = (Get-Content $templateFile | Out-String)
122+
$unitClass = $json | ConvertFrom-Json
123+
124+
# Expand unit prefixes into units
125+
$unitClass.Units = GetUnits $unitClass;
126+
127+
GenerateUnitClass $unitClass
128+
GenerateUnitEnum $unitClass
129+
GenerateUnitTestClass $unitClass
130+
131+
$unitClasses += $unitClass;
132+
}
133+
134+
GenerateUnitSystemDefault $unitClasses

0 commit comments

Comments
 (0)