ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/OniSplit/Exporter.cs
Revision: 1114
Committed: Wed Jan 22 14:08:57 2020 UTC (5 years, 8 months ago) by iritscen
File size: 2329 byte(s)
Log Message:
Adding OniSplit source code (v0.9.99.0). Many thanks to Neo for all his work over the years.

File Contents

# Content
1 using System;
2 using System.Collections.Generic;
3 using System.IO;
4 using System.Text.RegularExpressions;
5
6 namespace Oni
7 {
8 internal abstract class Exporter
9 {
10 private readonly InstanceFileManager fileManager;
11 private readonly string outputDirPath;
12 private readonly Dictionary<string, string> fileNames;
13 private Regex nameFilter;
14
15 protected Exporter(InstanceFileManager fileManager, string outputDirPath)
16 {
17 this.fileManager = fileManager;
18 this.outputDirPath = outputDirPath;
19 this.fileNames = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
20 }
21
22 public InstanceFileManager InstanceFileManager => fileManager;
23
24 public string OutputDirPath => outputDirPath;
25
26 public Regex NameFilter
27 {
28 get { return nameFilter; }
29 set { nameFilter = value; }
30 }
31
32 public void ExportFiles(IEnumerable<string> sourceFilePaths)
33 {
34 Directory.CreateDirectory(outputDirPath);
35
36 foreach (var sourceFilePath in sourceFilePaths)
37 ExportFile(sourceFilePath);
38
39 Flush();
40 }
41
42 protected virtual void ExportFile(string sourceFilePath)
43 {
44 Console.WriteLine(sourceFilePath);
45
46 var file = fileManager.OpenFile(sourceFilePath);
47 var descriptors = GetSupportedDescriptors(file);
48
49 if (nameFilter != null)
50 descriptors = descriptors.FindAll(x => x.HasName && nameFilter.IsMatch(x.FullName));
51
52 foreach (var descriptor in descriptors)
53 ExportInstance(descriptor);
54 }
55
56 protected abstract void ExportInstance(InstanceDescriptor descriptor);
57
58 protected virtual void Flush()
59 {
60 }
61
62 protected virtual List<InstanceDescriptor> GetSupportedDescriptors(InstanceFile file)
63 {
64 return file.GetNamedDescriptors();
65 }
66
67 protected string CreateFileName(InstanceDescriptor descriptor, string fileExtension)
68 {
69 string name = Importer.EncodeFileName(descriptor.FullName, fileNames);
70 return Path.Combine(outputDirPath, name + fileExtension);
71 }
72 }
73 }