Skip to content

Commit 140ce93

Browse files
committed
Abstract output operations.
1 parent 8576399 commit 140ce93

7 files changed

Lines changed: 48 additions & 14 deletions

File tree

converter/generator/DocBookTransformer.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ internal sealed class DocBookTransformer : DocToStaticPagesTransformer
1212
private readonly string BookDirName;
1313
private readonly (string url, string file, string titleEn, NavFiles navFiles)[] Pages;
1414

15-
public DocBookTransformer(DocToStaticPagesTransformerArgs args, IDocResourceResolver resourceResolver, ProblemRecorder problems) : base(args, resourceResolver, problems)
15+
public DocBookTransformer(DocToStaticPagesTransformerArgs args, IDocResourceResolver resourceResolver, IOutputOperations output, ProblemRecorder problems)
16+
: base(args, resourceResolver, output, problems)
1617
{
1718
AvailableLanguagesExpression = String.Join(',', AvailableLanguages);
1819
BookDirName = Path.GetFileName(Directory.EnumerateDirectories(Path.Combine(SourceFolder, "en")).Single());
@@ -98,7 +99,7 @@ protected override async Task TransformAsync(string language)
9899
var dstDir = Path.Combine(OutputFolder, url, language != "en" ? language : "");
99100
var nav = new Nav(navFiles, titles, i == 0);
100101

101-
Directory.CreateDirectory(dstDir);
102+
Output.CreateDirectory(dstDir);
102103

103104
var srcFile = Path.Combine(srcDir, file);
104105
var dstFile = Path.Combine(dstDir, "index.html");

converter/generator/DocIndexTransformer.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ namespace OriginLab.DocumentGeneration;
44

55
internal class DocIndexTransformer : DocToStaticPagesTransformer
66
{
7-
public DocIndexTransformer(DocToStaticPagesTransformerArgs args, IDocResourceResolver resourceResolver, ProblemRecorder problems) : base(args, resourceResolver, problems)
7+
public DocIndexTransformer(DocToStaticPagesTransformerArgs args, IDocResourceResolver resourceResolver, IOutputOperations output, ProblemRecorder problems)
8+
: base(args, resourceResolver, output, problems)
89
{
910
}
1011

@@ -25,11 +26,11 @@ protected override async Task TransformAsync(string language)
2526
: Path.GetFullPath(Path.Combine(OutputFolder, Path.GetDirectoryName(relativePath)!, "..", Path.GetFileName(relativePath)))
2627
;
2728
var destinationDir = Path.GetDirectoryName(destinationFile)!;
28-
Directory.CreateDirectory(destinationDir);
29+
Output.CreateDirectory(destinationDir);
2930

3031
Transform(sourceFile, destinationFile);
3132
}
3233

33-
File.WriteAllText(Path.Combine(OutputFolder, language, "404.html"), await Template.Render404PageAsync(language));
34+
Output.WriteAllText(Path.Combine(OutputFolder, language, "404.html"), await Template.Render404PageAsync(language));
3435
}
3536
}

converter/generator/DocToStaticPagesTransformer.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ internal abstract partial class DocToStaticPagesTransformer : DocTransformer
1414

1515
private INode[] LayoutNodes = null!;
1616

17-
protected DocToStaticPagesTransformer(DocToStaticPagesTransformerArgs args, IDocResourceResolver resourceResolver, ProblemRecorder problems) : base(args, resourceResolver, problems)
17+
protected DocToStaticPagesTransformer(DocToStaticPagesTransformerArgs args, IDocResourceResolver resourceResolver, IOutputOperations output, ProblemRecorder problems)
18+
: base(args, resourceResolver, output, problems)
1819
{
1920
BookUrlName = args.BookUrlName;
2021
}
@@ -23,17 +24,16 @@ public override async Task TransformAsync()
2324
{
2425
await base.TransformAsync();
2526

26-
File.WriteAllText(Path.Combine(OutputFolder, "404.html"), await Template.Render404PageAsync());
27+
Output.WriteAllText(Path.Combine(OutputFolder, "404.html"), await Template.Render404PageAsync());
2728
}
2829

2930
protected override async Task TransformAsync(string language)
3031
{
3132
var html = await InitializeLanguageLayoutAsync(language);
3233
var dir = Path.Combine(OutputFolder, language);
3334

34-
Directory.CreateDirectory(dir);
35-
36-
await File.WriteAllTextAsync(Path.Combine(dir, "layout.html"), html);
35+
Output.CreateDirectory(dir);
36+
Output.WriteAllText(Path.Combine(dir, "layout.html"), html);
3737
}
3838

3939
internal async Task<string> InitializeLanguageLayoutAsync(string language)

converter/generator/DocTransformer.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@ protected string Language
2525

2626
protected IDocResourceResolver ResourceResolver { get; }
2727

28+
protected IOutputOperations Output { get; }
29+
2830
private readonly ProblemRecorder Problems;
2931

30-
protected DocTransformer(DocTransformerArgs args, IDocResourceResolver resourceResolver, ProblemRecorder problems)
32+
protected DocTransformer(DocTransformerArgs args, IDocResourceResolver resourceResolver, IOutputOperations output, ProblemRecorder problems)
3133
{
3234
var sourceFolder = args.SourceFolder;
3335
SourceFolder = sourceFolder;
@@ -56,6 +58,7 @@ protected DocTransformer(DocTransformerArgs args, IDocResourceResolver resourceR
5658

5759
AvailableLanguages = languages;
5860
ResourceResolver = resourceResolver;
61+
Output = output;
5962
}
6063

6164
public virtual async Task TransformAsync()
@@ -80,7 +83,7 @@ protected void Transform(string sourceFile, string destinationFile, Action<IHtml
8083
beforeTransform?.Invoke(document, head, body, sourceFile);
8184
Transform(document, head, body, sourceFile);
8285

83-
using var sw = new StreamWriter(destinationFile);
86+
using var sw = Output.CreateStreamWriter(destinationFile);
8487
document.ToHtml(sw, HtmlMarkupFormatter.Instance);
8588
}
8689

@@ -139,8 +142,8 @@ internal protected virtual void Transform(IHtmlDocument document, IHtmlHeadEleme
139142

140143
if (copy is (string srcImg, string dstImg))
141144
{
142-
Directory.CreateDirectory(Path.GetDirectoryName(dstImg)!);
143-
File.Copy(srcImg, dstImg, overwrite: true);
145+
Output.CreateDirectory(Path.GetDirectoryName(dstImg)!);
146+
Output.CopyFile(srcImg, dstImg, overwrite: true);
144147
}
145148

146149
return img;
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
namespace OriginLab.DocumentGeneration;
2+
3+
public interface IOutputOperations
4+
{
5+
void CreateDirectory(string path);
6+
7+
TextWriter CreateStreamWriter(string fileName);
8+
9+
void WriteAllText(string file, string? contents);
10+
11+
void CopyFile(string from, string to, bool overwrite);
12+
}

converter/generator/Program.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ async static Task Main(string[] cmdArgs)
7676
}
7777

7878
services.AddSingleton<DocTransformerArgs>(sp => sp.GetRequiredService<DocToStaticPagesTransformerArgs>());
79+
services.AddSingleton<IOutputOperations, SystemOutputOperations>();
7980
services.AddSingleton<ProblemRecorder>();
8081

8182
var serviceProvider = services.BuildServiceProvider();
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
namespace OriginLab.DocumentGeneration;
2+
3+
internal sealed class SystemOutputOperations : IOutputOperations
4+
{
5+
public void CopyFile(string from, string to, bool overwrite)
6+
=> File.Copy(from, to, overwrite);
7+
8+
public void CreateDirectory(string path)
9+
=> Directory.CreateDirectory(path);
10+
11+
public TextWriter CreateStreamWriter(string fileName)
12+
=> new StreamWriter(fileName);
13+
14+
public void WriteAllText(string file, string? contents)
15+
=> File.WriteAllText(file, contents);
16+
}

0 commit comments

Comments
 (0)