Skip to content

Commit 20ecc7d

Browse files
committed
Post-merge rewrite.
1 parent 85448b9 commit 20ecc7d

File tree

3 files changed

+41
-7
lines changed

3 files changed

+41
-7
lines changed

src/OrchardCoreContrib.PoExtractor/PluginHelper.cs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,32 @@
11
using System.Reflection;
22
using Microsoft.CodeAnalysis.CSharp.Scripting;
33
using Microsoft.CodeAnalysis.Scripting;
4+
using OrchardCoreContrib.PoExtractor.DotNet;
5+
using OrchardCoreContrib.PoExtractor.DotNet.CS;
6+
using OrchardCoreContrib.PoExtractor.DotNet.VB;
7+
using OrchardCoreContrib.PoExtractor.Liquid;
8+
using OrchardCoreContrib.PoExtractor.Razor;
49

510
namespace OrchardCoreContrib.PoExtractor;
611

712
public static class PluginHelper
813
{
914
public static async Task ProcessPluginsAsync(
10-
IList<string> plugins,
15+
IEnumerable<string> plugins,
1116
List<IProjectProcessor> projectProcessors,
1217
List<string> projectFiles,
13-
IEnumerable<Assembly> assemblies)
18+
IEnumerable<Assembly> assemblies = null)
1419
{
20+
assemblies ??=
21+
[
22+
typeof(IProjectProcessor).Assembly, // OrchardCoreContrib.PoExtractor.Abstractions
23+
typeof(ExtractingCodeWalker).Assembly, // OrchardCoreContrib.PoExtractor.DotNet
24+
typeof(CSharpProjectProcessor).Assembly, // OrchardCoreContrib.PoExtractor.DotNet.CS
25+
typeof(VisualBasicProjectProcessor).Assembly, // OrchardCoreContrib.PoExtractor.DotNet.VB
26+
typeof(LiquidProjectProcessor).Assembly, // OrchardCoreContrib.PoExtractor.Liquid
27+
typeof(RazorProjectProcessor).Assembly, // OrchardCoreContrib.PoExtractor.Razor
28+
];
29+
1530
var sharedOptions = ScriptOptions.Default.AddReferences(assemblies);
1631

1732
foreach (var plugin in plugins)

src/OrchardCoreContrib.PoExtractor/Program.cs

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using McMaster.Extensions.CommandLineUtils;
1+
using System.ComponentModel.DataAnnotations;
2+
using McMaster.Extensions.CommandLineUtils;
3+
using OrchardCore.Modules;
24
using OrchardCoreContrib.PoExtractor.DotNet;
35
using OrchardCoreContrib.PoExtractor.DotNet.CS;
46
using OrchardCoreContrib.PoExtractor.DotNet.VB;
@@ -33,8 +35,18 @@ public static void Main(string[] args)
3335
var ignoredProjects = app.Option("-i|--ignore <IGNORED_PROJECTS>", "Ignores extracting PO files from a given project(s).", CommandOptionType.MultipleValue);
3436
var localizers = app.Option("--localizer <LOCALIZERS>", "Specifies the name of the localizer(s) that will be used during the extraction process.", CommandOptionType.MultipleValue);
3537
var single = app.Option("-s|--single <FILE_NAME>", "Specifies the single output file.", CommandOptionType.SingleValue);
36-
37-
app.OnExecute(() =>
38+
var plugins = app.Option(
39+
"-p|--plugin <FILE_NAME_OR_HTTPS_URL>",
40+
"A path or web URL with HTTPS scheme to a C# script (.csx) file which can define further " +
41+
"IProjectProcessor implementations. You can have multiple of this switch in a call.",
42+
CommandOptionType.MultipleValue,
43+
option => option.OnValidate(_ => option
44+
.Values
45+
.All(item => File.Exists(item) || item.StartsWithOrdinalIgnoreCase("https://"))
46+
? ValidationResult.Success
47+
: new ValidationResult("Plugin must be an existing local file or a valid HTTPS URL.")));
48+
49+
app.OnExecuteAsync(async cancellationToken =>
3850
{
3951
if (!Directory.Exists(inputPath.Value))
4052
{
@@ -84,14 +96,21 @@ public static void Main(string[] args)
8496
projectProcessors.Add(new LiquidProjectProcessor());
8597
}
8698

99+
if (plugins.Values.Count > 0)
100+
{
101+
await PluginHelper.ProcessPluginsAsync(plugins.Values, projectProcessors, projectFiles);
102+
}
103+
87104
var isSingleFileOutput = !string.IsNullOrEmpty(single.Value());
88105
var localizableStrings = new LocalizableStringCollection();
89106
foreach (var projectFile in projectFiles)
90107
{
91108
var projectPath = Path.GetDirectoryName(projectFile);
92109
var projectBasePath = Path.GetDirectoryName(projectPath) + Path.DirectorySeparatorChar;
93110
var projectRelativePath = projectPath[projectBasePath.Length..];
94-
var rootedProject = projectPath[(projectPath.IndexOf(inputPath.Value) + inputPath.Value.Length + 1)..];
111+
var rootedProject = projectPath == inputPath.Value
112+
? projectPath
113+
: projectPath[(projectPath.IndexOf(inputPath.Value, StringComparison.Ordinal) + inputPath.Value.Length + 1)..];
95114
if (IgnoredProject.ToList().Any(p => rootedProject.StartsWith(p)))
96115
{
97116
continue;

test/OrchardCoreContrib.PoExtractor.Tests/PluginTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public async Task ProcessPluginsBasicJsonLocalizationProcessor()
1919
var localizableStrings = new LocalizableStringCollection();
2020

2121
// Act
22-
await Program.ProcessPluginsAsync(plugins, projectProcessors, projectFiles);
22+
await PluginHelper.ProcessPluginsAsync(plugins, projectProcessors, projectFiles);
2323
projectProcessors[0].Process(PluginTestFiles, Path.GetFileName(Environment.CurrentDirectory), localizableStrings);
2424

2525
using (var writer = new PoWriter(stream))

0 commit comments

Comments
 (0)