mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-20 16:15:43 +00:00
71 lines
2.3 KiB
C#
71 lines
2.3 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using ZoneCodeGenerator.Interface;
|
|
using ZoneCodeGenerator.Parsing.CommandFile.Impl;
|
|
using ZoneCodeGenerator.Parsing.CommandFile.PostProcessor;
|
|
using ZoneCodeGenerator.Parsing.Impl;
|
|
using ZoneCodeGenerator.Persistence;
|
|
|
|
namespace ZoneCodeGenerator.Parsing.CommandFile
|
|
{
|
|
static class CommandFileReader
|
|
{
|
|
private static readonly IDataPostProcessor[] postProcessors =
|
|
{
|
|
new PostProcessorUsages(),
|
|
new PostProcessorLeafs(),
|
|
new PostProcessorMemberLeafs(),
|
|
new PostProcessorUnions(),
|
|
};
|
|
|
|
public static bool ReadFile(string path, CUISession session, bool verbose = false)
|
|
{
|
|
try
|
|
{
|
|
using (IIncludingParsingStream streamFileSystem = new IncludingStreamFileSystem(path))
|
|
{
|
|
var state = new CommandParserState(session.Repository);
|
|
|
|
using (IParsingFileStream preprocessorStream = new CommandFilePreprocessor(streamFileSystem))
|
|
{
|
|
var lexer = new Lexer(preprocessorStream);
|
|
var parser = new Parser<ICommandParserState>(state, lexer);
|
|
|
|
if (!parser.Parse(verbose))
|
|
return false;
|
|
|
|
preprocessorStream.Close();
|
|
streamFileSystem.Close();
|
|
|
|
if (!state.Apply(session))
|
|
{
|
|
Console.WriteLine("Finalizing from command file failed");
|
|
return false;
|
|
}
|
|
|
|
if (!PostProcessRepository(session.Repository))
|
|
{
|
|
Console.WriteLine("Postprocessing commands failed.");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
catch (IOException)
|
|
{
|
|
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
private static bool PostProcessRepository(IDataRepository repository)
|
|
{
|
|
return postProcessors.All(postProcessor => postProcessor.PostProcess(repository));
|
|
}
|
|
}
|
|
}
|