Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add JSON Export #32

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 20 additions & 5 deletions src/YarnSpinner.Console/Commands/CompileCommand.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@

namespace YarnSpinnerConsole
{
using System.IO;
using System.Linq;
using System.Text.Json;
using Yarn.Compiler;

public static class CompileCommand
{
public static void CompileFiles(FileInfo[] inputs, DirectoryInfo outputDirectory, string outputName, string outputStringTableName, string outputMetadataTableName, bool stdout)
public static void CompileFiles(FileInfo[] inputs, DirectoryInfo outputDirectory, string outputName, string outputStringTableName, string outputMetadataTableName, bool stdout, bool json)
{
var compiledResults = YarnSpinnerConsole.CompileProgram(inputs);

Expand Down Expand Up @@ -45,14 +47,27 @@ public static void CompileFiles(FileInfo[] inputs, DirectoryInfo outputDirectory
outputMetadataTableName = $"{outputName}-Metadata.csv";
}

var programOutputPath = Path.Combine(outputDirectory.FullName, $"{outputName}.yarnc");
var programOutputPath = Path.Combine(outputDirectory.FullName, $"{outputName}.{(json ? "json" : "yarnc")}");
var stringTableOutputPath = Path.Combine(outputDirectory.FullName, outputStringTableName);
var stringMetadatOutputPath = Path.Combine(outputDirectory.FullName, outputMetadataTableName);

using (var outStream = new FileStream(programOutputPath, FileMode.Create))
using (var codedStream = new Google.Protobuf.CodedOutputStream(outStream))
if (json)
{
var program = compiledResults.Program;

var settings = new Google.Protobuf.JsonFormatter.Settings(true);
var jsonFormatter = new Google.Protobuf.JsonFormatter(settings);

string jsonOutput = jsonFormatter.Format(program);
File.WriteAllText(programOutputPath, jsonOutput);
}
else
{
compiledResults.Program.WriteTo(codedStream);
using (var outStream = new FileStream(programOutputPath, FileMode.Create))
using (var codedStream = new Google.Protobuf.CodedOutputStream(outStream))
{
compiledResults.Program.WriteTo(codedStream);
}
}

Log.Info($"Wrote {programOutputPath}");
Expand Down
6 changes: 5 additions & 1 deletion src/YarnSpinner.Console/YarnSpinnerConsole.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,13 @@ public static int Main(string[] args)

var stdoutOption = new Option<bool>("--stdout", "Output machine-readable compilation result to stdout instead of to files");
compileCommand.AddOption(stdoutOption);

var jsonOption = new Option<bool>("-j", "Output compilation result to json instead of binary");
jsonOption.AddAlias("--json");
compileCommand.AddOption(jsonOption);
}

compileCommand.Handler = System.CommandLine.Invocation.CommandHandler.Create<FileInfo[], DirectoryInfo, string, string, string, bool>(CompileCommand.CompileFiles);
compileCommand.Handler = System.CommandLine.Invocation.CommandHandler.Create<FileInfo[], DirectoryInfo, string, string, string, bool, bool>(CompileCommand.CompileFiles);

var listSourcesCommand = new System.CommandLine.Command("list-sources", "Lists Yarn sources for a Yarn project.");
{
Expand Down