More tools organization
This commit is contained in:
parent
49e28ed9d2
commit
8e2486e61b
|
@ -1,22 +0,0 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 14
|
||||
VisualStudioVersion = 14.0.25420.1
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SymbolTableBuilder", "SymbolTableBuilder\SymbolTableBuilder.csproj", "{6B1381C7-93F9-4976-8856-E995A5A25102}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{6B1381C7-93F9-4976-8856-E995A5A25102}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6B1381C7-93F9-4976-8856-E995A5A25102}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6B1381C7-93F9-4976-8856-E995A5A25102}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6B1381C7-93F9-4976-8856-E995A5A25102}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
|
||||
</startup>
|
||||
</configuration>
|
|
@ -1,36 +0,0 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("SymbolTableBuilder")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("SymbolTableBuilder")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2017")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("6b1381c7-93f9-4976-8856-e995a5a25102")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -1,60 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{6B1381C7-93F9-4976-8856-E995A5A25102}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>SymbolTableBuilder</RootNamespace>
|
||||
<AssemblyName>symbols</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -0,0 +1,3 @@
|
|||
dotnet build tools/ScriptTool -o bin/ScriptTool
|
||||
dotnet build tools/SymbolTableBuilder -o bin/SymbolTableBuilder
|
||||
dotnet build tools/CompileTool -o bin/CompileTool
|
|
@ -0,0 +1,8 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
|
@ -0,0 +1,12 @@
|
|||
using System;
|
||||
|
||||
namespace CompileTool
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
Console.WriteLine("Hello World!");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.28307.168
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompileTool", "CompileTool\CompileTool.csproj", "{44399E43-DE61-41ED-85AE-5F3A9DA15970}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ScriptTool", "ScriptTool\ScriptTool.csproj", "{29AB41A8-6405-4C4B-A374-BF1BD7AF1A27}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SymbolTableBuilder", "SymbolTableBuilder\SymbolTableBuilder.csproj", "{2E0E2F98-4EB7-48C7-968D-1BEDCADA37F2}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ScriptToolGui", "ScriptToolGui\ScriptToolGui.csproj", "{BAE5CBBF-D0B3-4F82-A80A-957CEC379238}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{44399E43-DE61-41ED-85AE-5F3A9DA15970}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{44399E43-DE61-41ED-85AE-5F3A9DA15970}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{44399E43-DE61-41ED-85AE-5F3A9DA15970}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{44399E43-DE61-41ED-85AE-5F3A9DA15970}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{29AB41A8-6405-4C4B-A374-BF1BD7AF1A27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{29AB41A8-6405-4C4B-A374-BF1BD7AF1A27}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{29AB41A8-6405-4C4B-A374-BF1BD7AF1A27}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{29AB41A8-6405-4C4B-A374-BF1BD7AF1A27}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2E0E2F98-4EB7-48C7-968D-1BEDCADA37F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2E0E2F98-4EB7-48C7-968D-1BEDCADA37F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2E0E2F98-4EB7-48C7-968D-1BEDCADA37F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2E0E2F98-4EB7-48C7-968D-1BEDCADA37F2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{BAE5CBBF-D0B3-4F82-A80A-957CEC379238}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{BAE5CBBF-D0B3-4F82-A80A-957CEC379238}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{BAE5CBBF-D0B3-4F82-A80A-957CEC379238}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{BAE5CBBF-D0B3-4F82-A80A-957CEC379238}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {F18C3A5C-4E09-4F69-8D46-3B39B431C382}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -28,66 +28,77 @@ namespace ScriptTool
|
|||
static Compiler m12Compiler;
|
||||
static StreamWriter IncludeFile;
|
||||
|
||||
static void Main(string[] args)
|
||||
static int Main(string[] args)
|
||||
{
|
||||
options = ParseCommandLine(args);
|
||||
if (options == null)
|
||||
try
|
||||
{
|
||||
Usage();
|
||||
return;
|
||||
}
|
||||
|
||||
m12CharLookup = JsonConvert.DeserializeObject<Dictionary<byte, string>>(File.ReadAllText("m12-char-lookup.json"));
|
||||
ebCharLookup = JsonConvert.DeserializeObject<Dictionary<byte, string>>(File.ReadAllText("eb-char-lookup.json"));
|
||||
|
||||
if (options.Command == CommandType.Decompile)
|
||||
{
|
||||
// Set up decompilers
|
||||
m12Decompiler = new Decompiler(M12ControlCode.Codes, m12CharLookup, (rom, address) => rom[address + 1] == 0xFF);
|
||||
ebDecompiler = new Decompiler(EbControlCode.Codes, ebCharLookup, (rom, address) => rom[address] < 0x20);
|
||||
|
||||
// Load ROMs
|
||||
ebRom = File.ReadAllBytes(options.EbRom);
|
||||
m12Rom = File.ReadAllBytes(options.M12Rom);
|
||||
|
||||
// Decompile misc string tables
|
||||
if (options.DoMiscText)
|
||||
options = ParseCommandLine(args);
|
||||
if (options == null)
|
||||
{
|
||||
//DecompileEbMisc();
|
||||
DecompileM12Misc();
|
||||
Usage();
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Decompile main string tables
|
||||
if (options.DoMainText)
|
||||
m12CharLookup = JsonConvert.DeserializeObject<Dictionary<byte, string>>(File.ReadAllText("m12-char-lookup.json"));
|
||||
ebCharLookup = JsonConvert.DeserializeObject<Dictionary<byte, string>>(File.ReadAllText("eb-char-lookup.json"));
|
||||
|
||||
if (options.Command == CommandType.Decompile)
|
||||
{
|
||||
DecompileEb();
|
||||
DecompileM12();
|
||||
}
|
||||
}
|
||||
else if (options.Command == CommandType.Compile)
|
||||
{
|
||||
// Set up compilers
|
||||
m12Compiler = new Compiler(M12ControlCode.Codes, (rom, address) => rom[address + 1] == 0xFF);
|
||||
// Set up decompilers
|
||||
m12Decompiler = new Decompiler(M12ControlCode.Codes, m12CharLookup, (rom, address) => rom[address + 1] == 0xFF);
|
||||
ebDecompiler = new Decompiler(EbControlCode.Codes, ebCharLookup, (rom, address) => rom[address] < 0x20);
|
||||
|
||||
using (IncludeFile = File.CreateText(Path.Combine(options.WorkingDirectory, "m12-includes.asm")))
|
||||
{
|
||||
IncludeFile.WriteLine(".gba");
|
||||
IncludeFile.WriteLine(".open \"../m12.gba\",0x8000000");
|
||||
// Load ROMs
|
||||
ebRom = File.ReadAllBytes(options.EbRom);
|
||||
m12Rom = File.ReadAllBytes(options.M12Rom);
|
||||
|
||||
// Compile main string tables
|
||||
if (options.DoMainText)
|
||||
{
|
||||
CompileM12();
|
||||
}
|
||||
|
||||
// Compile misc string tables
|
||||
// Decompile misc string tables
|
||||
if (options.DoMiscText)
|
||||
{
|
||||
CompileM12Misc();
|
||||
//DecompileEbMisc();
|
||||
DecompileM12Misc();
|
||||
}
|
||||
|
||||
IncludeFile.WriteLine(".close");
|
||||
// Decompile main string tables
|
||||
if (options.DoMainText)
|
||||
{
|
||||
DecompileEb();
|
||||
DecompileM12();
|
||||
}
|
||||
}
|
||||
else if (options.Command == CommandType.Compile)
|
||||
{
|
||||
// Set up compilers
|
||||
m12Compiler = new Compiler(M12ControlCode.Codes, (rom, address) => rom[address + 1] == 0xFF);
|
||||
|
||||
using (IncludeFile = File.CreateText(Path.Combine(options.WorkingDirectory, "m12-includes.asm")))
|
||||
{
|
||||
IncludeFile.WriteLine(".gba");
|
||||
IncludeFile.WriteLine(".open \"../m12.gba\",0x8000000");
|
||||
|
||||
// Compile main string tables
|
||||
if (options.DoMainText)
|
||||
{
|
||||
CompileM12();
|
||||
}
|
||||
|
||||
// Compile misc string tables
|
||||
if (options.DoMiscText)
|
||||
{
|
||||
CompileM12Misc();
|
||||
}
|
||||
|
||||
IncludeFile.WriteLine(".close");
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("Encountered exception:");
|
||||
Console.WriteLine(ex);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -138,7 +149,10 @@ namespace ScriptTool
|
|||
|
||||
string working = argList[0];
|
||||
if (!Directory.Exists(working))
|
||||
{
|
||||
Console.WriteLine("Directory does not exist: " + Path.GetFullPath(working));
|
||||
return null;
|
||||
}
|
||||
|
||||
// Check for ROM paths
|
||||
string ebRom = null;
|
||||
|
@ -147,8 +161,18 @@ namespace ScriptTool
|
|||
{
|
||||
ebRom = argList[1];
|
||||
m12Rom = argList[2];
|
||||
if (!File.Exists(ebRom) || !File.Exists(m12Rom))
|
||||
|
||||
if (!File.Exists(ebRom))
|
||||
{
|
||||
Console.WriteLine("File does not exist: " + Path.GetFullPath(ebRom));
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!File.Exists(m12Rom))
|
||||
{
|
||||
Console.WriteLine("File does not exist: " + Path.GetFullPath(m12Rom));
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
return new CommandOptions
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"profiles": {
|
||||
"ScriptTool": {
|
||||
"commandName": "Project",
|
||||
"commandLineArgs": "-compile -main -misc \"..\\working\" \"..\\eb.smc\" \"..\\m12fresh.gba\"",
|
||||
"workingDirectory": "C:\\Users\\jeffe\\M12\\bin\\ScriptTool"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||
<SuppressNETCoreSdkPreviewMessage>true</SuppressNETCoreSdkPreviewMessage>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="eb-char-lookup.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="eb-codelist.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="eb-compressed-strings.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="item-map.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="m12-char-lookup.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="m12-codelist.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="m2-widths-main.bin">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="m2-widths-saturn.bin">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
|
@ -1,25 +0,0 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.28010.2050
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScriptTool", "ScriptTool\ScriptTool.csproj", "{17C0EE03-1D07-45AB-8F22-09C41230A231}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{17C0EE03-1D07-45AB-8F22-09C41230A231}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{17C0EE03-1D07-45AB-8F22-09C41230A231}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{17C0EE03-1D07-45AB-8F22-09C41230A231}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{17C0EE03-1D07-45AB-8F22-09C41230A231}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {D88AC004-012A-4D81-A9A0-9BC8F4D3D881}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -0,0 +1,99 @@
|
|||
{
|
||||
"80": " ",
|
||||
"81": "!",
|
||||
"82": "\"",
|
||||
"83": "#",
|
||||
"84": "$",
|
||||
"85": "%",
|
||||
"86": "&",
|
||||
"87": "'",
|
||||
"88": "(",
|
||||
"89": ")",
|
||||
"90": "*",
|
||||
"91": "+",
|
||||
"92": ",",
|
||||
"93": "-",
|
||||
"94": ".",
|
||||
"95": "/",
|
||||
"96": "0",
|
||||
"97": "1",
|
||||
"98": "2",
|
||||
"99": "3",
|
||||
"100": "4",
|
||||
"101": "5",
|
||||
"102": "6",
|
||||
"103": "7",
|
||||
"104": "8",
|
||||
"105": "9",
|
||||
"106": ":",
|
||||
"107": ";",
|
||||
"108": "<",
|
||||
"109": "=",
|
||||
"110": ">",
|
||||
"111": "?",
|
||||
"112": "@",
|
||||
"113": "A",
|
||||
"114": "B",
|
||||
"115": "C",
|
||||
"116": "D",
|
||||
"117": "E",
|
||||
"118": "F",
|
||||
"119": "G",
|
||||
"120": "H",
|
||||
"121": "I",
|
||||
"122": "J",
|
||||
"123": "K",
|
||||
"124": "L",
|
||||
"125": "M",
|
||||
"126": "N",
|
||||
"127": "O",
|
||||
"128": "P",
|
||||
"129": "Q",
|
||||
"130": "R",
|
||||
"131": "S",
|
||||
"132": "T",
|
||||
"133": "U",
|
||||
"134": "V",
|
||||
"135": "W",
|
||||
"136": "X",
|
||||
"137": "Y",
|
||||
"138": "Z",
|
||||
"139": "[8B]",
|
||||
"140": "[8C]",
|
||||
"141": "[8D]",
|
||||
"142": "[8E]",
|
||||
"143": "[8F]",
|
||||
"144": "`",
|
||||
"145": "a",
|
||||
"146": "b",
|
||||
"147": "c",
|
||||
"148": "d",
|
||||
"149": "e",
|
||||
"150": "f",
|
||||
"151": "g",
|
||||
"152": "h",
|
||||
"153": "i",
|
||||
"154": "j",
|
||||
"155": "k",
|
||||
"156": "l",
|
||||
"157": "m",
|
||||
"158": "n",
|
||||
"159": "o",
|
||||
"160": "p",
|
||||
"161": "q",
|
||||
"162": "r",
|
||||
"163": "s",
|
||||
"164": "t",
|
||||
"165": "u",
|
||||
"166": "v",
|
||||
"167": "w",
|
||||
"168": "x",
|
||||
"169": "y",
|
||||
"170": "z",
|
||||
"171": "{",
|
||||
"172": "|",
|
||||
"173": "}",
|
||||
"174": "~",
|
||||
"175": "\\",
|
||||
"189": "➨"
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,768 @@
|
|||
|
||||
in the
|
||||
that
|
||||
...
|
||||
and
|
||||
this
|
||||
to the
|
||||
about
|
||||
just
|
||||
of the
|
||||
something
|
||||
going to
|
||||
to
|
||||
you have
|
||||
your
|
||||
for
|
||||
you're
|
||||
@You
|
||||
really
|
||||
don't
|
||||
@The
|
||||
e the
|
||||
e you
|
||||
...
|
||||
the
|
||||
will
|
||||
...Brick Road
|
||||
ing
|
||||
some
|
||||
|
||||
@Do you want to
|
||||
like
|
||||
ou don't have
|
||||
is
|
||||
you
|
||||
you
|
||||
anything else
|
||||
the
|
||||
you want to
|
||||
for the
|
||||
friend
|
||||
at the
|
||||
ould you like
|
||||
from
|
||||
would
|
||||
he Runaway Five
|
||||
with
|
||||
want to
|
||||
@If you
|
||||
you don't
|
||||
s the
|
||||
ed to
|
||||
e...
|
||||
something
|
||||
t the
|
||||
@...
|
||||
@Please
|
||||
's
|
||||
of your
|
||||
@It's
|
||||
@Thank you
|
||||
@I
|
||||
here.
|
||||
in
|
||||
@Do you
|
||||
I'll
|
||||
have
|
||||
e of
|
||||
d you
|
||||
@I'm
|
||||
me to
|
||||
@I don't
|
||||
@Well,
|
||||
@This is
|
||||
ed the
|
||||
@You're
|
||||
for a
|
||||
anything
|
||||
ing
|
||||
of
|
||||
you should
|
||||
I
|
||||
from the
|
||||
s...
|
||||
it's
|
||||
time
|
||||
e to
|
||||
ed
|
||||
e of the
|
||||
to you
|
||||
n't you
|
||||
again
|
||||
for you.
|
||||
other
|
||||
ation
|
||||
little
|
||||
ing to
|
||||
can't
|
||||
much
|
||||
someone
|
||||
on the
|
||||
looks like
|
||||
don't you
|
||||
very
|
||||
the
|
||||
can
|
||||
you
|
||||
that you
|
||||
it
|
||||
you want
|
||||
ou can't
|
||||
able to
|
||||
already
|
||||
give you
|
||||
understand
|
||||
|
||||
my
|
||||
you can
|
||||
that
|
||||
what
|
||||
here's
|
||||
there
|
||||
n the
|
||||
@What
|
||||
Thank you
|
||||
I can't
|
||||
one
|
||||
@The
|
||||
thought
|
||||
not
|
||||
You should
|
||||
ou know
|
||||
has
|
||||
back
|
||||
of
|
||||
ve been
|
||||
I'm
|
||||
there
|
||||
with you
|
||||
@I heard
|
||||
in
|
||||
here
|
||||
Fourside
|
||||
I wonder
|
||||
to
|
||||
could
|
||||
think
|
||||
out
|
||||
good
|
||||
the
|
||||
You
|
||||
too much
|
||||
ome back
|
||||
t...
|
||||
here
|
||||
thing
|
||||
come
|
||||
ly
|
||||
ent
|
||||
strong
|
||||
money.
|
||||
@I'll
|
||||
an
|
||||
ou must
|
||||
are you
|
||||
with the
|
||||
on your
|
||||
too many
|
||||
you.
|
||||
know
|
||||
to be
|
||||
around
|
||||
if you
|
||||
@Are you
|
||||
ome again
|
||||
e and
|
||||
more
|
||||
think
|
||||
e your
|
||||
@Don't
|
||||
nd the
|
||||
t to
|
||||
rea
|
||||
he
|
||||
me
|
||||
strange
|
||||
for you
|
||||
ight
|
||||
a
|
||||
be
|
||||
ther
|
||||
all
|
||||
cannot
|
||||
here is
|
||||
You have
|
||||
Monotoli
|
||||
was
|
||||
ll you
|
||||
hat
|
||||
, but
|
||||
stuff
|
||||
eep
|
||||
it
|
||||
didn't
|
||||
like th
|
||||
ll right
|
||||
should
|
||||
over
|
||||
@Oh,
|
||||
hear
|
||||
every
|
||||
I'm not
|
||||
about t
|
||||
zombies
|
||||
damage
|
||||
his is
|
||||
all
|
||||
some
|
||||
@It
|
||||
attack
|
||||
right
|
||||
ally
|
||||
orry
|
||||
ess
|
||||
er
|
||||
@That's
|
||||
carry it
|
||||
ake
|
||||
t was
|
||||
, the
|
||||
n you
|
||||
sn't
|
||||
help
|
||||
king
|
||||
ear
|
||||
ing the
|
||||
It's
|
||||
very
|
||||
talking
|
||||
ou've
|
||||
that's
|
||||
to me
|
||||
@Hello
|
||||
enemy
|
||||
you are
|
||||
by
|
||||
IBNT
|
||||
ight
|
||||
on't
|
||||
est
|
||||
ick
|
||||
power
|
||||
s that
|
||||
s are
|
||||
call
|
||||
t is
|
||||
is
|
||||
age
|
||||
, and
|
||||
great
|
||||
@Thanks
|
||||
people
|
||||
ter
|
||||
not
|
||||
ill
|
||||
ness
|
||||
@This
|
||||
into
|
||||
ha
|
||||
I can
|
||||
t your
|
||||
before
|
||||
things
|
||||
tion
|
||||
for
|
||||
be
|
||||
this
|
||||
Happy
|
||||
You
|
||||
out
|
||||
enough
|
||||
I'm
|
||||
@You
|
||||
go
|
||||
for
|
||||
all th
|
||||
though
|
||||
ing you
|
||||
e you
|
||||
ring
|
||||
one
|
||||
get
|
||||
t you
|
||||
@I'm s
|
||||
the s
|
||||
e's
|
||||
port
|
||||
d...
|
||||
out
|
||||
@What
|
||||
get
|
||||
I have
|
||||
looking
|
||||
n this
|
||||
of my
|
||||
have a
|
||||
ent
|
||||
do
|
||||
d of
|
||||
ting
|
||||
ncrease
|
||||
Twoson
|
||||
through
|
||||
s your
|
||||
ou'll
|
||||
place
|
||||
right
|
||||
Onett
|
||||
|
||||
our
|
||||
too
|
||||
ater
|
||||
be
|
||||
ain
|
||||
ing.
|
||||
take
|
||||
e is
|
||||
the
|
||||
please
|
||||
do you
|
||||
need
|
||||
use
|
||||
now.
|
||||
got
|
||||
|
||||
and
|
||||
ning
|
||||
sta
|
||||
the t
|
||||
I was
|
||||
y the
|
||||
his
|
||||
appe
|
||||
con
|
||||
ho
|
||||
hat's
|
||||
Threed
|
||||
get
|
||||
s of
|
||||
inter
|
||||
talk
|
||||
man
|
||||
day
|
||||
ove
|
||||
ha ha
|
||||
inally
|
||||
monkey
|
||||
s and
|
||||
ate
|
||||
see
|
||||
town
|
||||
side
|
||||
y to
|
||||
ever
|
||||
equip
|
||||
than
|
||||
who
|
||||
long
|
||||
care
|
||||
room
|
||||
e are
|
||||
ard
|
||||
end
|
||||
, you
|
||||
the b
|
||||
I know
|
||||
think
|
||||
s you
|
||||
time
|
||||
ment
|
||||
so
|
||||
!
|
||||
I've
|
||||
ell
|
||||
wa
|
||||
ious
|
||||
reat
|
||||
live
|
||||
ange
|
||||
we
|
||||
ble
|
||||
@.....
|
||||
ecover
|
||||
only
|
||||
thing
|
||||
er...
|
||||
Mr.
|
||||
ough
|
||||
now
|
||||
I
|
||||
wor
|
||||
to
|
||||
ed.
|
||||
I
|
||||
're
|
||||
give
|
||||
ing a
|
||||
return
|
||||
better
|
||||
ince
|
||||
well
|
||||
one
|
||||
still
|
||||
ying
|
||||
me...
|
||||
sta
|
||||
ust
|
||||
per
|
||||
lease
|
||||
ling
|
||||
point
|
||||
ect
|
||||
ast
|
||||
pretty
|
||||
Giygas
|
||||
ecause
|
||||
member
|
||||
carry
|
||||
used
|
||||
elieve
|
||||
money
|
||||
pres
|
||||
way
|
||||
di
|
||||
even
|
||||
ound
|
||||
s to
|
||||
ting
|
||||
ted
|
||||
oing
|
||||
and
|
||||
ine
|
||||
T
|
||||
sure
|
||||
on
|
||||
@...I
|
||||
while
|
||||
@but
|
||||
@We
|
||||
ice
|
||||
se
|
||||
ive
|
||||
rea
|
||||
com
|
||||
est
|
||||
have
|
||||
but
|
||||
away
|
||||
here
|
||||
must
|
||||
but
|
||||
want
|
||||
ready
|
||||
I'm
|
||||
carr
|
||||
my
|
||||
ay...
|
||||
are
|
||||
@Hey,
|
||||
world
|
||||
ing a
|
||||
happ
|
||||
seem
|
||||
his
|
||||
nder
|
||||
se
|
||||
ant
|
||||
item
|
||||
@But
|
||||
sho
|
||||
in a
|
||||
made
|
||||
night
|
||||
et's
|
||||
like
|
||||
The
|
||||
che
|
||||
de
|
||||
ful
|
||||
hat
|
||||
and
|
||||
self
|
||||
ould
|
||||
@No
|
||||
car
|
||||
tr
|
||||
good
|
||||
stor
|
||||
ombie
|
||||
@Oh
|
||||
@It
|
||||
s a
|
||||
vent
|
||||
ant
|
||||
so
|
||||
olla
|
||||
ree
|
||||
Your
|
||||
make
|
||||
work
|
||||
power
|
||||
home
|
||||
also
|
||||
ance
|
||||
@How
|
||||
h...
|
||||
@If
|
||||
ple
|
||||
buy
|
||||
e,
|
||||
n't
|
||||
oke
|
||||
n't
|
||||
more
|
||||
Good
|
||||
t a
|
||||
all
|
||||
take
|
||||
round
|
||||
when
|
||||
name
|
||||
being
|
||||
attle
|
||||
ite
|
||||
ack
|
||||
y...
|
||||
@Whe
|
||||
with
|
||||
al
|
||||
have
|
||||
look
|
||||
t of
|
||||
aster
|
||||
a lo
|
||||
feel
|
||||
here
|
||||
count
|
||||
monst
|
||||
now
|
||||
ark
|
||||
ous
|
||||
'll
|
||||
bus
|
||||
head
|
||||
any
|
||||
t you
|
||||
erson
|
||||
after
|
||||
ummer
|
||||
hard
|
||||
ful
|
||||
ever
|
||||
kid
|
||||
a b
|
||||
kay
|
||||
tra
|
||||
pla
|
||||
ook
|
||||
ome
|
||||
eat
|
||||
@Wel
|
||||
off
|
||||
turn
|
||||
I am
|
||||
oney
|
||||
any
|
||||
ave
|
||||
any
|
||||
enem
|
||||
con
|
||||
me
|
||||
red
|
||||
en
|
||||
bo
|
||||
re
|
||||
ell
|
||||
sell
|
||||
what
|
||||
next
|
||||
ure
|
||||
bu
|
||||
pro
|
||||
on
|
||||
res
|
||||
es
|
||||
lo
|
||||
our
|
||||
use
|
||||
iste
|
||||
ood
|
||||
no
|
||||
ope
|
||||
ock
|
||||
row
|
||||
@He
|
||||
how
|
||||
may
|
||||
as
|
||||
stor
|
||||
are
|
||||
ost
|
||||
mean
|
||||
We
|
||||
He
|
||||
@An
|
||||
it
|
||||
in
|
||||
ound
|
||||
one.
|
||||
come
|
||||
blue
|
||||
way,
|
||||
or
|
||||
mo
|
||||
.
|
||||
each
|
||||
some
|
||||
@(Th
|
||||
otel
|
||||
hand
|
||||
came
|
||||
ca
|
||||
ame
|
||||
@Hey
|
||||
een
|
||||
spec
|
||||
red
|
||||
ing!
|
||||
...
|
||||
hose
|
||||
ind
|
||||
ice
|
||||
ver
|
||||
W
|
||||
min
|
||||
et
|
||||
on
|
||||
ace
|
||||
er.
|
||||
are
|
||||
nter
|
||||
o...
|
||||
were
|
||||
help
|
||||
old
|
||||
it.
|
||||
hear
|
||||
stop
|
||||
look
|
||||
com
|
||||
@Do
|
||||
her
|
||||
pro
|
||||
chin
|
||||
ble
|
||||
e a
|
||||
girl
|
||||
luck
|
||||
B
|
||||
act
|
||||
ike
|
||||
down
|
||||
part
|
||||
see
|
||||
use
|
||||
uch
|
||||
from
|
||||
just
|
||||
llow
|
||||
@Her
|
||||
at
|
||||
@So,
|
||||
ye
|
||||
ser
|
||||
ying
|
||||
ring
|
||||
eave
|
||||
big
|
||||
ried
|
||||
was
|
||||
say
|
||||
su
|
||||
her
|
||||
it.
|
||||
Man
|
||||
kin
|
||||
up
|
||||
ers
|
||||
@Why
|
||||
p...
|
||||
cour
|
||||
him
|
||||
agic
|
||||
any
|
||||
fin
|
||||
eal
|
||||
he
|
||||
ide
|
||||
oor
|
||||
ity
|
||||
got
|
||||
ens
|
||||
ish
|
||||
ive
|
||||
sa
|
||||
oon
|
||||
fee
|
||||
s a
|
||||
nce
|
||||
D
|
||||
uck
|
||||
ass
|
||||
man
|
||||
a p
|
||||
@(I
|
||||
@Wh
|
||||
gu
|
||||
(
|
||||
bus
|
||||
los
|
||||
ts
|
||||
ba
|
||||
S
|
||||
if
|
||||
@Ha
|
||||
ma
|
||||
unn
|
||||
ay
|
||||
ner
|
||||
@A
|
||||
or
|
||||
stu
|
||||
ust
|
||||
kya
|
||||
shi
|
||||
pos
|
||||
A
|
||||
int
|
||||
le
|
||||
ary
|
||||
ven
|
||||
ch
|
||||
own
|
||||
hu
|
||||
@My
|
||||
@So
|
||||
sp
|
||||
sh
|
||||
wan
|
||||
ool
|
||||
Y
|
||||
old
|
||||
eas
|
||||
, I
|
||||
iki
|
||||
@Ky
|
||||
@Ye
|
||||
spi
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,233 @@
|
|||
{
|
||||
"0": "ぁ",
|
||||
"1": "あ",
|
||||
"2": "ぃ",
|
||||
"3": "い",
|
||||
"4": "ぅ",
|
||||
"5": "う",
|
||||
"6": "ぇ",
|
||||
"7": "え",
|
||||
"8": "ぉ",
|
||||
"9": "お",
|
||||
"10": "か",
|
||||
"11": "が",
|
||||
"12": "き",
|
||||
"13": "ぎ",
|
||||
"14": "く",
|
||||
"15": "ぐ",
|
||||
"16": "け",
|
||||
"17": "げ",
|
||||
"18": "こ",
|
||||
"19": "ご",
|
||||
"20": "さ",
|
||||
"21": "ざ",
|
||||
"22": "し",
|
||||
"23": "じ",
|
||||
"24": "す",
|
||||
"25": "ず",
|
||||
"26": "せ",
|
||||
"27": "ぜ",
|
||||
"28": "そ",
|
||||
"29": "ぞ",
|
||||
"30": "た",
|
||||
"31": "だ",
|
||||
"32": "ち",
|
||||
"33": "ぢ",
|
||||
"34": "っ",
|
||||
"35": "つ",
|
||||
"36": "づ",
|
||||
"37": "て",
|
||||
"38": "で",
|
||||
"39": "と",
|
||||
"40": "ど",
|
||||
"41": "な",
|
||||
"42": "に",
|
||||
"43": "ぬ",
|
||||
"44": "ね",
|
||||
"45": "の",
|
||||
"46": "は",
|
||||
"47": "ば",
|
||||
"48": "ぱ",
|
||||
"49": "ひ",
|
||||
"50": "び",
|
||||
"51": "ぴ",
|
||||
"52": "ふ",
|
||||
"53": "ぶ",
|
||||
"54": "ぷ",
|
||||
"55": "へ",
|
||||
"56": "べ",
|
||||
"57": "ぺ",
|
||||
"58": "ほ",
|
||||
"59": "ぼ",
|
||||
"60": "ぽ",
|
||||
"61": "ま",
|
||||
"62": "み",
|
||||
"63": "む",
|
||||
"64": "め",
|
||||
"65": "も",
|
||||
"66": "ゃ",
|
||||
"67": "や",
|
||||
"68": "ゅ",
|
||||
"69": "ゆ",
|
||||
"70": "ょ",
|
||||
"71": "よ",
|
||||
"72": "ら",
|
||||
"73": "り",
|
||||
"74": "る",
|
||||
"75": "れ",
|
||||
"76": "ろ",
|
||||
"77": " ",
|
||||
"78": "わ",
|
||||
"79": " ",
|
||||
"80": " ",
|
||||
"81": "を",
|
||||
"82": "ん",
|
||||
"93": "➨",
|
||||
"96": "ァ",
|
||||
"97": "ア",
|
||||
"98": "ィ",
|
||||
"99": "イ",
|
||||
"100": "ゥ",
|
||||
"101": "ウ",
|
||||
"102": "ェ",
|
||||
"103": "エ",
|
||||
"104": "ォ",
|
||||
"105": "オ",
|
||||
"106": "カ",
|
||||
"107": "ガ",
|
||||
"108": "キ",
|
||||
"109": "ギ",
|
||||
"110": "ク",
|
||||
"111": "グ",
|
||||
"112": "ケ",
|
||||
"113": "ゲ",
|
||||
"114": "コ",
|
||||
"115": "ゴ",
|
||||
"116": "サ",
|
||||
"117": "ザ",
|
||||
"118": "シ",
|
||||
"119": "ジ",
|
||||
"120": "ス",
|
||||
"121": "ズ",
|
||||
"122": "セ",
|
||||
"123": "ゼ",
|
||||
"124": "ソ",
|
||||
"125": "ゾ",
|
||||
"126": "タ",
|
||||
"127": "ダ",
|
||||
"128": "チ",
|
||||
"129": "ヂ",
|
||||
"130": "ッ",
|
||||
"131": "ツ",
|
||||
"132": "ヅ",
|
||||
"133": "テ",
|
||||
"134": "デ",
|
||||
"135": "ト",
|
||||
"136": "ド",
|
||||
"137": "ナ",
|
||||
"138": "ニ",
|
||||
"139": "ヌ",
|
||||
"140": "ネ",
|
||||
"141": "ノ",
|
||||
"142": "ハ",
|
||||
"143": "バ",
|
||||
"144": "パ",
|
||||
"145": "ヒ",
|
||||
"146": "ビ",
|
||||
"147": "ピ",
|
||||
"148": "フ",
|
||||
"149": "ブ",
|
||||
"150": "プ",
|
||||
"151": "ヘ",
|
||||
"152": "ベ",
|
||||
"153": "ペ",
|
||||
"154": "ホ",
|
||||
"155": "ボ",
|
||||
"156": "ポ",
|
||||
"157": "マ",
|
||||
"158": "ミ",
|
||||
"159": ".",
|
||||
"160": "ム",
|
||||
"161": "メ",
|
||||
"162": "モ",
|
||||
"163": "ャ",
|
||||
"164": "ヤ",
|
||||
"165": "ュ",
|
||||
"166": "ユ",
|
||||
"167": "ョ",
|
||||
"168": "ヨ",
|
||||
"169": "ラ",
|
||||
"170": "リ",
|
||||
"171": "ル",
|
||||
"172": "レ",
|
||||
"173": "ロ",
|
||||
"174": " ",
|
||||
"175": "ワ",
|
||||
"176": " ",
|
||||
"177": " ",
|
||||
"178": "ヲ",
|
||||
"179": "ン",
|
||||
"192": "A",
|
||||
"193": "B",
|
||||
"194": "C",
|
||||
"195": "D",
|
||||
"196": "E",
|
||||
"197": "F",
|
||||
"198": "G",
|
||||
"199": "H",
|
||||
"200": "I",
|
||||
"201": "J",
|
||||
"202": "K",
|
||||
"203": "L",
|
||||
"204": "M",
|
||||
"205": "N",
|
||||
"206": "O",
|
||||
"207": "P",
|
||||
"208": "Q",
|
||||
"209": "R",
|
||||
"210": "S",
|
||||
"211": "T",
|
||||
"212": "U",
|
||||
"213": "V",
|
||||
"214": "W",
|
||||
"215": "X",
|
||||
"216": "Y",
|
||||
"217": "Z",
|
||||
"218": "α",
|
||||
"219": "β",
|
||||
"220": "γ",
|
||||
"221": "Σ",
|
||||
"222": "Ω",
|
||||
"223": " ",
|
||||
"224": "0",
|
||||
"225": "1",
|
||||
"226": "2",
|
||||
"227": "3",
|
||||
"228": "4",
|
||||
"229": "5",
|
||||
"230": "6",
|
||||
"231": "7",
|
||||
"232": "8",
|
||||
"233": "9",
|
||||
"234": "#",
|
||||
"235": "!",
|
||||
"236": "?",
|
||||
"237": "/",
|
||||
"238": ":",
|
||||
"239": "-",
|
||||
"240": "~",
|
||||
"241": "・",
|
||||
"242": "¨",
|
||||
"243": "。",
|
||||
"244": "「",
|
||||
"245": "」",
|
||||
"246": "(",
|
||||
"247": ")",
|
||||
"248": "♪",
|
||||
"249": "◯",
|
||||
"250": "$",
|
||||
"251": "\"",
|
||||
"252": "°",
|
||||
"253": "◆",
|
||||
"254": "Ê"
|
||||
}
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,23 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.IO;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace ScriptToolGui
|
||||
{
|
||||
class Config
|
||||
{
|
||||
public string WorkingFolder { get; set; }
|
||||
|
||||
public static Config Read(string configPath)
|
||||
{
|
||||
if (!File.Exists(configPath))
|
||||
return null;
|
||||
|
||||
return JsonConvert.DeserializeObject<Config>(File.ReadAllText(configPath));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using ScriptTool;
|
||||
|
||||
namespace ScriptToolGui
|
||||
{
|
||||
class IndexLabel
|
||||
{
|
||||
public int Index { get; private set; }
|
||||
public string Label { get; private set; }
|
||||
|
||||
public IndexLabel(int index, string label)
|
||||
{
|
||||
Index = index;
|
||||
Label = label;
|
||||
}
|
||||
|
||||
public IndexLabel(MainStringRef stringRef)
|
||||
: this(stringRef.Index, stringRef.Label)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ScriptToolGui
|
||||
{
|
||||
class IndexMapping : IEnumerable<IndexPair>, ICollection<IndexPair>
|
||||
{
|
||||
public ICollection<IndexPair> Pairs { get; private set; }
|
||||
|
||||
public IndexMapping()
|
||||
{
|
||||
Pairs = new List<IndexPair>();
|
||||
}
|
||||
|
||||
public void Add(int first, int second)
|
||||
{
|
||||
Pairs.Add(new IndexPair(first, second));
|
||||
}
|
||||
|
||||
public IEnumerator<IndexPair> GetEnumerator()
|
||||
{
|
||||
return Pairs.GetEnumerator();
|
||||
}
|
||||
|
||||
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
|
||||
{
|
||||
return GetEnumerator();
|
||||
}
|
||||
|
||||
public void Add(IndexPair item)
|
||||
{
|
||||
Pairs.Add(item);
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
Pairs.Clear();
|
||||
}
|
||||
|
||||
public bool Contains(IndexPair item)
|
||||
{
|
||||
return Pairs.Contains(item);
|
||||
}
|
||||
|
||||
public void CopyTo(IndexPair[] array, int arrayIndex)
|
||||
{
|
||||
Pairs.CopyTo(array, arrayIndex);
|
||||
}
|
||||
|
||||
public int Count
|
||||
{
|
||||
get { return Pairs.Count; }
|
||||
}
|
||||
|
||||
public bool IsReadOnly
|
||||
{
|
||||
get { return Pairs.IsReadOnly; }
|
||||
}
|
||||
|
||||
public bool Remove(IndexPair item)
|
||||
{
|
||||
return Pairs.Remove(item);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ScriptToolGui
|
||||
{
|
||||
class IndexPair
|
||||
{
|
||||
public int First { get; private set; }
|
||||
public int Second { get; private set; }
|
||||
|
||||
public IndexPair(int first, int second)
|
||||
{
|
||||
First = first;
|
||||
Second = second;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return String.Format("First: {0}, Second: {1}", First, Second);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,603 @@
|
|||
namespace ScriptToolGui
|
||||
{
|
||||
partial class MainForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.mainMenu = new System.Windows.Forms.MenuStrip();
|
||||
this.fileMenu = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.saveMenu = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolsMenu = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.resolveDuplicateLabelsMenu = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.checkCompletionMenu = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.autosaveMenu = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.topPanel = new System.Windows.Forms.FlowLayoutPanel();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.collectionSelector = new System.Windows.Forms.ComboBox();
|
||||
this.groupSelector = new System.Windows.Forms.ComboBox();
|
||||
this.prevButton = new System.Windows.Forms.Button();
|
||||
this.nextButton = new System.Windows.Forms.Button();
|
||||
this.backButton = new System.Windows.Forms.Button();
|
||||
this.mainPanel = new System.Windows.Forms.Panel();
|
||||
this.mainSplitContainer = new System.Windows.Forms.SplitContainer();
|
||||
this.leftSplitContainer = new System.Windows.Forms.SplitContainer();
|
||||
this.textBoxPanel = new System.Windows.Forms.Panel();
|
||||
this.ebString = new System.Windows.Forms.TextBox();
|
||||
this.m12String = new System.Windows.Forms.TextBox();
|
||||
this.m12StringEnglish = new System.Windows.Forms.TextBox();
|
||||
this.lineOpsPanel = new System.Windows.Forms.FlowLayoutPanel();
|
||||
this.copyCodesButton = new System.Windows.Forms.Button();
|
||||
this.previewButton = new System.Windows.Forms.Button();
|
||||
this.translateButton = new System.Windows.Forms.Button();
|
||||
this.codeSplitContainer = new System.Windows.Forms.SplitContainer();
|
||||
this.codeList = new System.Windows.Forms.ListBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.referenceList = new System.Windows.Forms.ListBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.gameSelectorPanel = new System.Windows.Forms.FlowLayoutPanel();
|
||||
this.ebSelector = new System.Windows.Forms.RadioButton();
|
||||
this.m12Selector = new System.Windows.Forms.RadioButton();
|
||||
this.statusBar = new System.Windows.Forms.StatusStrip();
|
||||
this.writeLabel = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.writeTimer = new System.Windows.Forms.Timer(this.components);
|
||||
this.previewer = new ScriptToolGui.StringPreviewer();
|
||||
this.mainMenu.SuspendLayout();
|
||||
this.topPanel.SuspendLayout();
|
||||
this.mainPanel.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.mainSplitContainer)).BeginInit();
|
||||
this.mainSplitContainer.Panel1.SuspendLayout();
|
||||
this.mainSplitContainer.Panel2.SuspendLayout();
|
||||
this.mainSplitContainer.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.leftSplitContainer)).BeginInit();
|
||||
this.leftSplitContainer.Panel1.SuspendLayout();
|
||||
this.leftSplitContainer.Panel2.SuspendLayout();
|
||||
this.leftSplitContainer.SuspendLayout();
|
||||
this.textBoxPanel.SuspendLayout();
|
||||
this.lineOpsPanel.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.codeSplitContainer)).BeginInit();
|
||||
this.codeSplitContainer.Panel1.SuspendLayout();
|
||||
this.codeSplitContainer.Panel2.SuspendLayout();
|
||||
this.codeSplitContainer.SuspendLayout();
|
||||
this.gameSelectorPanel.SuspendLayout();
|
||||
this.statusBar.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// mainMenu
|
||||
//
|
||||
this.mainMenu.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.mainMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.fileMenu,
|
||||
this.toolsMenu});
|
||||
this.mainMenu.Location = new System.Drawing.Point(0, 0);
|
||||
this.mainMenu.Name = "mainMenu";
|
||||
this.mainMenu.Size = new System.Drawing.Size(1026, 24);
|
||||
this.mainMenu.TabIndex = 8;
|
||||
this.mainMenu.Text = "menuStrip1";
|
||||
//
|
||||
// fileMenu
|
||||
//
|
||||
this.fileMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.saveMenu});
|
||||
this.fileMenu.Name = "fileMenu";
|
||||
this.fileMenu.Size = new System.Drawing.Size(37, 20);
|
||||
this.fileMenu.Text = "File";
|
||||
//
|
||||
// saveMenu
|
||||
//
|
||||
this.saveMenu.Name = "saveMenu";
|
||||
this.saveMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));
|
||||
this.saveMenu.Size = new System.Drawing.Size(138, 22);
|
||||
this.saveMenu.Text = "Save";
|
||||
this.saveMenu.Click += new System.EventHandler(this.saveMenu_Click);
|
||||
//
|
||||
// toolsMenu
|
||||
//
|
||||
this.toolsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.resolveDuplicateLabelsMenu,
|
||||
this.checkCompletionMenu,
|
||||
this.autosaveMenu});
|
||||
this.toolsMenu.Name = "toolsMenu";
|
||||
this.toolsMenu.Size = new System.Drawing.Size(47, 20);
|
||||
this.toolsMenu.Text = "Tools";
|
||||
//
|
||||
// resolveDuplicateLabelsMenu
|
||||
//
|
||||
this.resolveDuplicateLabelsMenu.Name = "resolveDuplicateLabelsMenu";
|
||||
this.resolveDuplicateLabelsMenu.Size = new System.Drawing.Size(214, 22);
|
||||
this.resolveDuplicateLabelsMenu.Text = "Resolve duplicate labels...";
|
||||
this.resolveDuplicateLabelsMenu.Click += new System.EventHandler(this.resolveDuplicateLabelsMenu_Click);
|
||||
//
|
||||
// checkCompletionMenu
|
||||
//
|
||||
this.checkCompletionMenu.Name = "checkCompletionMenu";
|
||||
this.checkCompletionMenu.Size = new System.Drawing.Size(214, 22);
|
||||
this.checkCompletionMenu.Text = "Check completion status...";
|
||||
this.checkCompletionMenu.Click += new System.EventHandler(this.checkCompletionMenu_Click);
|
||||
//
|
||||
// autosaveMenu
|
||||
//
|
||||
this.autosaveMenu.Checked = true;
|
||||
this.autosaveMenu.CheckOnClick = true;
|
||||
this.autosaveMenu.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.autosaveMenu.Name = "autosaveMenu";
|
||||
this.autosaveMenu.Size = new System.Drawing.Size(214, 22);
|
||||
this.autosaveMenu.Text = "Autosave";
|
||||
this.autosaveMenu.Click += new System.EventHandler(this.autosaveMenu_Click);
|
||||
//
|
||||
// topPanel
|
||||
//
|
||||
this.topPanel.AutoSize = true;
|
||||
this.topPanel.Controls.Add(this.label1);
|
||||
this.topPanel.Controls.Add(this.collectionSelector);
|
||||
this.topPanel.Controls.Add(this.groupSelector);
|
||||
this.topPanel.Controls.Add(this.prevButton);
|
||||
this.topPanel.Controls.Add(this.nextButton);
|
||||
this.topPanel.Controls.Add(this.backButton);
|
||||
this.topPanel.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.topPanel.Location = new System.Drawing.Point(0, 24);
|
||||
this.topPanel.Name = "topPanel";
|
||||
this.topPanel.Size = new System.Drawing.Size(1026, 29);
|
||||
this.topPanel.TabIndex = 10;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(3, 8);
|
||||
this.label1.Margin = new System.Windows.Forms.Padding(3, 8, 0, 0);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(39, 13);
|
||||
this.label1.TabIndex = 13;
|
||||
this.label1.Text = "Group:";
|
||||
//
|
||||
// collectionSelector
|
||||
//
|
||||
this.collectionSelector.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.collectionSelector.FormattingEnabled = true;
|
||||
this.collectionSelector.Location = new System.Drawing.Point(45, 4);
|
||||
this.collectionSelector.Margin = new System.Windows.Forms.Padding(3, 4, 3, 3);
|
||||
this.collectionSelector.Name = "collectionSelector";
|
||||
this.collectionSelector.Size = new System.Drawing.Size(157, 21);
|
||||
this.collectionSelector.TabIndex = 14;
|
||||
this.collectionSelector.SelectionChangeCommitted += new System.EventHandler(this.collectionSelector_SelectionChangeCommitted);
|
||||
//
|
||||
// groupSelector
|
||||
//
|
||||
this.groupSelector.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.groupSelector.FormattingEnabled = true;
|
||||
this.groupSelector.Location = new System.Drawing.Point(208, 4);
|
||||
this.groupSelector.Margin = new System.Windows.Forms.Padding(3, 4, 3, 3);
|
||||
this.groupSelector.Name = "groupSelector";
|
||||
this.groupSelector.Size = new System.Drawing.Size(238, 21);
|
||||
this.groupSelector.TabIndex = 10;
|
||||
this.groupSelector.SelectionChangeCommitted += new System.EventHandler(this.groupSelector_SelectionChangeCommitted);
|
||||
//
|
||||
// prevButton
|
||||
//
|
||||
this.prevButton.Location = new System.Drawing.Point(452, 3);
|
||||
this.prevButton.Name = "prevButton";
|
||||
this.prevButton.Size = new System.Drawing.Size(45, 23);
|
||||
this.prevButton.TabIndex = 16;
|
||||
this.prevButton.Text = "˄";
|
||||
this.prevButton.UseVisualStyleBackColor = true;
|
||||
this.prevButton.Click += new System.EventHandler(this.prevButton_Click);
|
||||
//
|
||||
// nextButton
|
||||
//
|
||||
this.nextButton.Location = new System.Drawing.Point(503, 3);
|
||||
this.nextButton.Name = "nextButton";
|
||||
this.nextButton.Size = new System.Drawing.Size(45, 23);
|
||||
this.nextButton.TabIndex = 15;
|
||||
this.nextButton.Text = "˅";
|
||||
this.nextButton.UseVisualStyleBackColor = true;
|
||||
this.nextButton.Click += new System.EventHandler(this.nextButton_Click);
|
||||
//
|
||||
// backButton
|
||||
//
|
||||
this.backButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.backButton.Location = new System.Drawing.Point(554, 3);
|
||||
this.backButton.Name = "backButton";
|
||||
this.backButton.Size = new System.Drawing.Size(75, 23);
|
||||
this.backButton.TabIndex = 12;
|
||||
this.backButton.Text = "Back";
|
||||
this.backButton.UseVisualStyleBackColor = true;
|
||||
this.backButton.Click += new System.EventHandler(this.backButton_Click);
|
||||
//
|
||||
// mainPanel
|
||||
//
|
||||
this.mainPanel.AutoSize = true;
|
||||
this.mainPanel.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.mainPanel.Controls.Add(this.mainSplitContainer);
|
||||
this.mainPanel.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.mainPanel.Location = new System.Drawing.Point(0, 53);
|
||||
this.mainPanel.Name = "mainPanel";
|
||||
this.mainPanel.Size = new System.Drawing.Size(1026, 667);
|
||||
this.mainPanel.TabIndex = 11;
|
||||
//
|
||||
// mainSplitContainer
|
||||
//
|
||||
this.mainSplitContainer.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
|
||||
this.mainSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.mainSplitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
|
||||
this.mainSplitContainer.Location = new System.Drawing.Point(0, 0);
|
||||
this.mainSplitContainer.Name = "mainSplitContainer";
|
||||
//
|
||||
// mainSplitContainer.Panel1
|
||||
//
|
||||
this.mainSplitContainer.Panel1.AutoScroll = true;
|
||||
this.mainSplitContainer.Panel1.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.mainSplitContainer.Panel1.Controls.Add(this.leftSplitContainer);
|
||||
//
|
||||
// mainSplitContainer.Panel2
|
||||
//
|
||||
this.mainSplitContainer.Panel2.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.mainSplitContainer.Panel2.Controls.Add(this.codeSplitContainer);
|
||||
this.mainSplitContainer.Panel2.Controls.Add(this.gameSelectorPanel);
|
||||
this.mainSplitContainer.Size = new System.Drawing.Size(1026, 667);
|
||||
this.mainSplitContainer.SplitterDistance = 800;
|
||||
this.mainSplitContainer.TabIndex = 6;
|
||||
//
|
||||
// leftSplitContainer
|
||||
//
|
||||
this.leftSplitContainer.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
|
||||
this.leftSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.leftSplitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
|
||||
this.leftSplitContainer.Location = new System.Drawing.Point(0, 0);
|
||||
this.leftSplitContainer.Name = "leftSplitContainer";
|
||||
this.leftSplitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
|
||||
//
|
||||
// leftSplitContainer.Panel1
|
||||
//
|
||||
this.leftSplitContainer.Panel1.Controls.Add(this.textBoxPanel);
|
||||
this.leftSplitContainer.Panel1.Controls.Add(this.lineOpsPanel);
|
||||
//
|
||||
// leftSplitContainer.Panel2
|
||||
//
|
||||
this.leftSplitContainer.Panel2.Controls.Add(this.previewer);
|
||||
this.leftSplitContainer.Size = new System.Drawing.Size(800, 667);
|
||||
this.leftSplitContainer.SplitterDistance = 526;
|
||||
this.leftSplitContainer.TabIndex = 5;
|
||||
//
|
||||
// textBoxPanel
|
||||
//
|
||||
this.textBoxPanel.AutoScroll = true;
|
||||
this.textBoxPanel.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
|
||||
this.textBoxPanel.Controls.Add(this.ebString);
|
||||
this.textBoxPanel.Controls.Add(this.m12String);
|
||||
this.textBoxPanel.Controls.Add(this.m12StringEnglish);
|
||||
this.textBoxPanel.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.textBoxPanel.Location = new System.Drawing.Point(0, 0);
|
||||
this.textBoxPanel.Name = "textBoxPanel";
|
||||
this.textBoxPanel.Size = new System.Drawing.Size(796, 489);
|
||||
this.textBoxPanel.TabIndex = 10;
|
||||
//
|
||||
// ebString
|
||||
//
|
||||
this.ebString.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.ebString.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.ebString.Location = new System.Drawing.Point(3, 4);
|
||||
this.ebString.Multiline = true;
|
||||
this.ebString.Name = "ebString";
|
||||
this.ebString.ReadOnly = true;
|
||||
this.ebString.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
|
||||
this.ebString.Size = new System.Drawing.Size(786, 128);
|
||||
this.ebString.TabIndex = 9;
|
||||
//
|
||||
// m12String
|
||||
//
|
||||
this.m12String.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.m12String.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.m12String.Location = new System.Drawing.Point(3, 138);
|
||||
this.m12String.Multiline = true;
|
||||
this.m12String.Name = "m12String";
|
||||
this.m12String.ReadOnly = true;
|
||||
this.m12String.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
|
||||
this.m12String.Size = new System.Drawing.Size(786, 128);
|
||||
this.m12String.TabIndex = 10;
|
||||
//
|
||||
// m12StringEnglish
|
||||
//
|
||||
this.m12StringEnglish.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.m12StringEnglish.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.m12StringEnglish.Location = new System.Drawing.Point(3, 272);
|
||||
this.m12StringEnglish.Multiline = true;
|
||||
this.m12StringEnglish.Name = "m12StringEnglish";
|
||||
this.m12StringEnglish.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
|
||||
this.m12StringEnglish.Size = new System.Drawing.Size(786, 128);
|
||||
this.m12StringEnglish.TabIndex = 11;
|
||||
this.m12StringEnglish.MouseClick += new System.Windows.Forms.MouseEventHandler(this.m12StringEnglish_MouseClick);
|
||||
//
|
||||
// lineOpsPanel
|
||||
//
|
||||
this.lineOpsPanel.AutoSize = true;
|
||||
this.lineOpsPanel.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
|
||||
this.lineOpsPanel.Controls.Add(this.copyCodesButton);
|
||||
this.lineOpsPanel.Controls.Add(this.previewButton);
|
||||
this.lineOpsPanel.Controls.Add(this.translateButton);
|
||||
this.lineOpsPanel.Dock = System.Windows.Forms.DockStyle.Bottom;
|
||||
this.lineOpsPanel.Location = new System.Drawing.Point(0, 489);
|
||||
this.lineOpsPanel.Name = "lineOpsPanel";
|
||||
this.lineOpsPanel.Size = new System.Drawing.Size(796, 33);
|
||||
this.lineOpsPanel.TabIndex = 9;
|
||||
//
|
||||
// copyCodesButton
|
||||
//
|
||||
this.copyCodesButton.Location = new System.Drawing.Point(3, 3);
|
||||
this.copyCodesButton.Name = "copyCodesButton";
|
||||
this.copyCodesButton.Size = new System.Drawing.Size(124, 23);
|
||||
this.copyCodesButton.TabIndex = 0;
|
||||
this.copyCodesButton.Text = "Copy codes and labels";
|
||||
this.copyCodesButton.UseVisualStyleBackColor = true;
|
||||
this.copyCodesButton.Click += new System.EventHandler(this.copyCodesButton_Click);
|
||||
//
|
||||
// previewButton
|
||||
//
|
||||
this.previewButton.Location = new System.Drawing.Point(133, 3);
|
||||
this.previewButton.Name = "previewButton";
|
||||
this.previewButton.Size = new System.Drawing.Size(75, 23);
|
||||
this.previewButton.TabIndex = 1;
|
||||
this.previewButton.Text = "Preview";
|
||||
this.previewButton.UseVisualStyleBackColor = true;
|
||||
this.previewButton.Click += new System.EventHandler(this.previewButton_Click);
|
||||
//
|
||||
// translateButton
|
||||
//
|
||||
this.translateButton.Location = new System.Drawing.Point(214, 3);
|
||||
this.translateButton.Name = "translateButton";
|
||||
this.translateButton.Size = new System.Drawing.Size(114, 23);
|
||||
this.translateButton.TabIndex = 2;
|
||||
this.translateButton.Text = "Google Translate";
|
||||
this.translateButton.UseVisualStyleBackColor = true;
|
||||
this.translateButton.Click += new System.EventHandler(this.translateButton_Click);
|
||||
//
|
||||
// codeSplitContainer
|
||||
//
|
||||
this.codeSplitContainer.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
|
||||
this.codeSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.codeSplitContainer.Location = new System.Drawing.Point(0, 33);
|
||||
this.codeSplitContainer.Name = "codeSplitContainer";
|
||||
this.codeSplitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
|
||||
//
|
||||
// codeSplitContainer.Panel1
|
||||
//
|
||||
this.codeSplitContainer.Panel1.Controls.Add(this.codeList);
|
||||
this.codeSplitContainer.Panel1.Controls.Add(this.label2);
|
||||
//
|
||||
// codeSplitContainer.Panel2
|
||||
//
|
||||
this.codeSplitContainer.Panel2.Controls.Add(this.referenceList);
|
||||
this.codeSplitContainer.Panel2.Controls.Add(this.label3);
|
||||
this.codeSplitContainer.Size = new System.Drawing.Size(222, 634);
|
||||
this.codeSplitContainer.SplitterDistance = 292;
|
||||
this.codeSplitContainer.TabIndex = 1;
|
||||
//
|
||||
// codeList
|
||||
//
|
||||
this.codeList.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.codeList.FormattingEnabled = true;
|
||||
this.codeList.HorizontalScrollbar = true;
|
||||
this.codeList.Location = new System.Drawing.Point(0, 19);
|
||||
this.codeList.Name = "codeList";
|
||||
this.codeList.Size = new System.Drawing.Size(218, 269);
|
||||
this.codeList.TabIndex = 3;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.label2.Location = new System.Drawing.Point(0, 0);
|
||||
this.label2.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.label2.Size = new System.Drawing.Size(46, 19);
|
||||
this.label2.TabIndex = 0;
|
||||
this.label2.Text = "Codes:";
|
||||
//
|
||||
// referenceList
|
||||
//
|
||||
this.referenceList.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.referenceList.FormattingEnabled = true;
|
||||
this.referenceList.HorizontalScrollbar = true;
|
||||
this.referenceList.Location = new System.Drawing.Point(0, 19);
|
||||
this.referenceList.Name = "referenceList";
|
||||
this.referenceList.Size = new System.Drawing.Size(218, 315);
|
||||
this.referenceList.TabIndex = 2;
|
||||
this.referenceList.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.referenceList_MouseDoubleClick);
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.label3.Location = new System.Drawing.Point(0, 0);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.label3.Size = new System.Drawing.Size(71, 19);
|
||||
this.label3.TabIndex = 1;
|
||||
this.label3.Text = "References:";
|
||||
//
|
||||
// gameSelectorPanel
|
||||
//
|
||||
this.gameSelectorPanel.AutoSize = true;
|
||||
this.gameSelectorPanel.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
|
||||
this.gameSelectorPanel.Controls.Add(this.ebSelector);
|
||||
this.gameSelectorPanel.Controls.Add(this.m12Selector);
|
||||
this.gameSelectorPanel.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.gameSelectorPanel.Location = new System.Drawing.Point(0, 0);
|
||||
this.gameSelectorPanel.Name = "gameSelectorPanel";
|
||||
this.gameSelectorPanel.Size = new System.Drawing.Size(222, 33);
|
||||
this.gameSelectorPanel.TabIndex = 0;
|
||||
//
|
||||
// ebSelector
|
||||
//
|
||||
this.ebSelector.Appearance = System.Windows.Forms.Appearance.Button;
|
||||
this.ebSelector.Location = new System.Drawing.Point(3, 3);
|
||||
this.ebSelector.Name = "ebSelector";
|
||||
this.ebSelector.Size = new System.Drawing.Size(64, 23);
|
||||
this.ebSelector.TabIndex = 0;
|
||||
this.ebSelector.Text = "EB";
|
||||
this.ebSelector.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
this.ebSelector.UseVisualStyleBackColor = true;
|
||||
this.ebSelector.CheckedChanged += new System.EventHandler(this.gameSelector_CheckedChanged);
|
||||
//
|
||||
// m12Selector
|
||||
//
|
||||
this.m12Selector.Appearance = System.Windows.Forms.Appearance.Button;
|
||||
this.m12Selector.Checked = true;
|
||||
this.m12Selector.Location = new System.Drawing.Point(73, 3);
|
||||
this.m12Selector.Name = "m12Selector";
|
||||
this.m12Selector.Size = new System.Drawing.Size(64, 23);
|
||||
this.m12Selector.TabIndex = 1;
|
||||
this.m12Selector.TabStop = true;
|
||||
this.m12Selector.Text = "M12";
|
||||
this.m12Selector.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
this.m12Selector.UseVisualStyleBackColor = true;
|
||||
this.m12Selector.CheckedChanged += new System.EventHandler(this.gameSelector_CheckedChanged);
|
||||
//
|
||||
// statusBar
|
||||
//
|
||||
this.statusBar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.writeLabel});
|
||||
this.statusBar.Location = new System.Drawing.Point(0, 720);
|
||||
this.statusBar.Name = "statusBar";
|
||||
this.statusBar.Size = new System.Drawing.Size(1026, 22);
|
||||
this.statusBar.TabIndex = 7;
|
||||
this.statusBar.Text = "statusStrip1";
|
||||
//
|
||||
// writeLabel
|
||||
//
|
||||
this.writeLabel.Name = "writeLabel";
|
||||
this.writeLabel.Size = new System.Drawing.Size(0, 17);
|
||||
//
|
||||
// writeTimer
|
||||
//
|
||||
this.writeTimer.Enabled = true;
|
||||
this.writeTimer.Interval = 10000;
|
||||
this.writeTimer.Tick += new System.EventHandler(this.writeTimer_Tick);
|
||||
//
|
||||
// previewer
|
||||
//
|
||||
this.previewer.AutoScroll = true;
|
||||
this.previewer.CharLookup = null;
|
||||
this.previewer.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.previewer.Location = new System.Drawing.Point(0, 0);
|
||||
this.previewer.M12Compiler = null;
|
||||
this.previewer.MaxWidth = 0;
|
||||
this.previewer.Name = "previewer";
|
||||
this.previewer.Size = new System.Drawing.Size(796, 133);
|
||||
this.previewer.TabIndex = 0;
|
||||
//
|
||||
// MainForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(1026, 742);
|
||||
this.Controls.Add(this.mainPanel);
|
||||
this.Controls.Add(this.topPanel);
|
||||
this.Controls.Add(this.mainMenu);
|
||||
this.Controls.Add(this.statusBar);
|
||||
this.MainMenuStrip = this.mainMenu;
|
||||
this.Name = "MainForm";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "MOTHER 1+2 Funland";
|
||||
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);
|
||||
this.mainMenu.ResumeLayout(false);
|
||||
this.mainMenu.PerformLayout();
|
||||
this.topPanel.ResumeLayout(false);
|
||||
this.topPanel.PerformLayout();
|
||||
this.mainPanel.ResumeLayout(false);
|
||||
this.mainSplitContainer.Panel1.ResumeLayout(false);
|
||||
this.mainSplitContainer.Panel2.ResumeLayout(false);
|
||||
this.mainSplitContainer.Panel2.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.mainSplitContainer)).EndInit();
|
||||
this.mainSplitContainer.ResumeLayout(false);
|
||||
this.leftSplitContainer.Panel1.ResumeLayout(false);
|
||||
this.leftSplitContainer.Panel1.PerformLayout();
|
||||
this.leftSplitContainer.Panel2.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.leftSplitContainer)).EndInit();
|
||||
this.leftSplitContainer.ResumeLayout(false);
|
||||
this.textBoxPanel.ResumeLayout(false);
|
||||
this.textBoxPanel.PerformLayout();
|
||||
this.lineOpsPanel.ResumeLayout(false);
|
||||
this.codeSplitContainer.Panel1.ResumeLayout(false);
|
||||
this.codeSplitContainer.Panel1.PerformLayout();
|
||||
this.codeSplitContainer.Panel2.ResumeLayout(false);
|
||||
this.codeSplitContainer.Panel2.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.codeSplitContainer)).EndInit();
|
||||
this.codeSplitContainer.ResumeLayout(false);
|
||||
this.gameSelectorPanel.ResumeLayout(false);
|
||||
this.statusBar.ResumeLayout(false);
|
||||
this.statusBar.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.MenuStrip mainMenu;
|
||||
private System.Windows.Forms.ToolStripMenuItem fileMenu;
|
||||
private System.Windows.Forms.ToolStripMenuItem saveMenu;
|
||||
private System.Windows.Forms.FlowLayoutPanel topPanel;
|
||||
private System.Windows.Forms.Button backButton;
|
||||
private System.Windows.Forms.ComboBox groupSelector;
|
||||
private System.Windows.Forms.Panel mainPanel;
|
||||
private System.Windows.Forms.SplitContainer mainSplitContainer;
|
||||
private System.Windows.Forms.SplitContainer leftSplitContainer;
|
||||
private System.Windows.Forms.SplitContainer codeSplitContainer;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.ListBox referenceList;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.FlowLayoutPanel gameSelectorPanel;
|
||||
private System.Windows.Forms.RadioButton ebSelector;
|
||||
private System.Windows.Forms.RadioButton m12Selector;
|
||||
private System.Windows.Forms.StatusStrip statusBar;
|
||||
private System.Windows.Forms.ToolStripStatusLabel writeLabel;
|
||||
private System.Windows.Forms.Timer writeTimer;
|
||||
private System.Windows.Forms.Panel textBoxPanel;
|
||||
private System.Windows.Forms.TextBox ebString;
|
||||
private System.Windows.Forms.TextBox m12String;
|
||||
private System.Windows.Forms.TextBox m12StringEnglish;
|
||||
private System.Windows.Forms.FlowLayoutPanel lineOpsPanel;
|
||||
private System.Windows.Forms.Button copyCodesButton;
|
||||
private System.Windows.Forms.ListBox codeList;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.ComboBox collectionSelector;
|
||||
private System.Windows.Forms.Button previewButton;
|
||||
private StringPreviewer previewer;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolsMenu;
|
||||
private System.Windows.Forms.ToolStripMenuItem resolveDuplicateLabelsMenu;
|
||||
private System.Windows.Forms.ToolStripMenuItem checkCompletionMenu;
|
||||
private System.Windows.Forms.Button prevButton;
|
||||
private System.Windows.Forms.Button nextButton;
|
||||
private System.Windows.Forms.ToolStripMenuItem autosaveMenu;
|
||||
private System.Windows.Forms.Button translateButton;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,997 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using ScriptTool;
|
||||
using System.IO;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace ScriptToolGui
|
||||
{
|
||||
public partial class MainForm : Form
|
||||
{
|
||||
// Config
|
||||
Config config;
|
||||
|
||||
// Static/const members
|
||||
static Compiler m12Compiler = new Compiler(M12ControlCode.Codes, (rom, address) => rom[address + 1] == 0xFF);
|
||||
static Compiler ebCompiler = new Compiler(EbControlCode.Codes, (rom, address) => rom[address] < 0x20);
|
||||
static readonly Game[] validGames;
|
||||
static IDictionary<byte, string> ebCharLookup;
|
||||
static IDictionary<byte, string> m12CharLookup;
|
||||
|
||||
// Lookups
|
||||
Dictionary<Game, TextBox> textboxLookup;
|
||||
Dictionary<Game, List<string>> stringsLookup;
|
||||
|
||||
// Saving changes
|
||||
object changeLock = new object();
|
||||
bool changesMade = false;
|
||||
|
||||
// Strings
|
||||
List<string> m12Strings;
|
||||
List<string> m12StringsEnglish;
|
||||
List<string> ebStrings;
|
||||
|
||||
// Index mappings
|
||||
IndexMapping itemMapping = new IndexMapping();
|
||||
|
||||
// Matched reference pairs
|
||||
MatchedGroupCollection tptGroups = new MatchedGroupCollection("TPT", Game.Eb, Game.M12, Game.M12English);
|
||||
MatchedGroupCollection battleActionGroups = new MatchedGroupCollection("Battle actions", Game.Eb, Game.M12, Game.M12English);
|
||||
MatchedGroupCollection itemHelpGroups = new MatchedGroupCollection("Item help", Game.Eb, Game.M12, Game.M12English);
|
||||
MatchedGroupCollection psiHelpGroups = new MatchedGroupCollection("PSI help", Game.Eb, Game.M12, Game.M12English);
|
||||
MatchedGroupCollection enemyEncounterGroups = new MatchedGroupCollection("Enemy encounters", Game.Eb, Game.M12, Game.M12English);
|
||||
MatchedGroupCollection enemyDeathGroups = new MatchedGroupCollection("Enemy deaths", Game.Eb, Game.M12, Game.M12English);
|
||||
MatchedGroupCollection rawM12Groups = new MatchedGroupCollection("Raw M12 strings", Game.M12, Game.M12English);
|
||||
MatchedGroupCollection rawEbGroups = new MatchedGroupCollection("Raw EB strings", Game.Eb);
|
||||
List<MatchedGroupCollection> matchedCollections = new List<MatchedGroupCollection>();
|
||||
|
||||
// Navigation stack
|
||||
IDictionary<Game, int> currentIndex;
|
||||
NavigationEntry previousNavigationState = null;
|
||||
Stack<NavigationEntry> navigationStack = new Stack<NavigationEntry>();
|
||||
MatchedGroupCollection currentCollection = null;
|
||||
|
||||
// Misc
|
||||
bool badStart = false;
|
||||
|
||||
static MainForm()
|
||||
{
|
||||
validGames = new Game[] { Game.Eb, Game.M12, Game.M12English };
|
||||
ebCharLookup = JsonConvert.DeserializeObject<Dictionary<byte, string>>(File.ReadAllText("eb-char-lookup.json"));
|
||||
m12CharLookup = JsonConvert.DeserializeObject<Dictionary<byte, string>>(File.ReadAllText("m12-char-lookup.json"));
|
||||
}
|
||||
|
||||
string ReadEbString(byte[] rom, int address, int length)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
for (int i = 0; i < length && rom[address] != 0; i++)
|
||||
{
|
||||
sb.Append((char)(rom[address++] - 0x30));
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public MainForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
try
|
||||
{
|
||||
config = Config.Read("config.json");
|
||||
|
||||
previewer.M12Compiler = m12Compiler;
|
||||
previewer.CharLookup = ebCharLookup;
|
||||
|
||||
ImportAllStrings();
|
||||
ImportAllStringRefs();
|
||||
|
||||
InitLookups();
|
||||
|
||||
PopulateCollectionSelector();
|
||||
|
||||
collectionSelector.SelectedIndex = 0;
|
||||
collectionSelector_SelectionChangeCommitted(null, null);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MessageBox.Show("There was an error starting the tool." + Environment.NewLine +
|
||||
"Reason: " + e.Message);
|
||||
|
||||
badStart = true;
|
||||
this.Load += (s, ee) => this.Close();
|
||||
}
|
||||
}
|
||||
|
||||
private void PopulateCollectionSelector()
|
||||
{
|
||||
collectionSelector.Items.Clear();
|
||||
collectionSelector.Items.AddRange(matchedCollections.ToArray());
|
||||
}
|
||||
|
||||
private void PopulateGroupSelector(MatchedGroupCollection collection)
|
||||
{
|
||||
groupSelector.Items.Clear();
|
||||
|
||||
if (collection != null)
|
||||
{
|
||||
groupSelector.Items.AddRange(collection.Groups.ToArray());
|
||||
}
|
||||
}
|
||||
|
||||
private void InitLookups()
|
||||
{
|
||||
textboxLookup = new Dictionary<Game, TextBox> {
|
||||
{ Game.Eb, ebString },
|
||||
{ Game.M12, m12String },
|
||||
{ Game.M12English, m12StringEnglish }
|
||||
};
|
||||
|
||||
stringsLookup = new Dictionary<Game, List<string>> {
|
||||
{ Game.Eb, ebStrings },
|
||||
{ Game.M12, m12Strings },
|
||||
{ Game.M12English, m12StringsEnglish }
|
||||
};
|
||||
|
||||
currentIndex = new Dictionary<Game, int> {
|
||||
{ Game.Eb, -1 },
|
||||
{ Game.M12, -1 },
|
||||
{ Game.M12English,-1 }
|
||||
};
|
||||
}
|
||||
|
||||
private void ImportAllStringRefs()
|
||||
{
|
||||
// TPT
|
||||
var m12PrimaryTptRefs = ImportStringRefs("m12-tpt-primary.json");
|
||||
var ebPrimaryTptRefs = ImportStringRefs("eb-tpt-primary.json");
|
||||
|
||||
var m12SecondaryTptRefs = ImportStringRefs("m12-tpt-secondary.json");
|
||||
var ebSecondaryTptRefs = ImportStringRefs("eb-tpt-secondary.json");
|
||||
|
||||
tptGroups.Groups.AddRange(MatchRefs(ebPrimaryTptRefs, m12PrimaryTptRefs));
|
||||
tptGroups.Groups.AddRange(MatchRefs(ebSecondaryTptRefs, m12SecondaryTptRefs));
|
||||
tptGroups.SortGroups();
|
||||
|
||||
// Battle actions
|
||||
var m12BattleActionRefs = ImportStringRefs("m12-battle-actions.json");
|
||||
var ebBattleActionRefs = ImportStringRefs("eb-battle-actions.json");
|
||||
|
||||
battleActionGroups.Groups.AddRange(MatchRefs(ebBattleActionRefs, m12BattleActionRefs));
|
||||
battleActionGroups.SortGroups();
|
||||
|
||||
// Item help
|
||||
itemMapping = JsonConvert.DeserializeObject<IndexMapping>(File.ReadAllText("item-map.json"));
|
||||
var m12ItemHelpRefs = ImportStringRefs("m12-item-help.json");
|
||||
var ebItemHelpRefs = ImportStringRefs("eb-item-help.json");
|
||||
|
||||
var itemHelpMappingGroups = itemMapping.Select(p => new MatchedGroup(
|
||||
ebItemHelpRefs.First(e => e.Index == p.First),
|
||||
m12ItemHelpRefs.First(m => m.Index == p.Second)))
|
||||
.OrderBy(g => g.Refs[Game.Eb].Index)
|
||||
.ToArray();
|
||||
|
||||
itemHelpGroups.Groups.AddRange(itemHelpMappingGroups);
|
||||
|
||||
// PSI help
|
||||
var m12PsiHelpRefs = ImportStringRefs("m12-psi-help.json");
|
||||
var ebPsiHelpRefs = ImportStringRefs("eb-psi-help.json");
|
||||
|
||||
var psiHelpMappingGroups = ebPsiHelpRefs.Select(e =>
|
||||
new MatchedGroup(e,
|
||||
m12PsiHelpRefs.First(m => m.Index == e.Index - 1)))
|
||||
.ToArray();
|
||||
|
||||
psiHelpGroups.Groups.AddRange(psiHelpMappingGroups);
|
||||
psiHelpGroups.SortGroups();
|
||||
|
||||
// Enemy encounters
|
||||
var m12EncounterRefs = ImportStringRefs("m12-enemy-encounters.json");
|
||||
var ebEncounterRefs = ImportStringRefs("eb-enemy-encounters.json");
|
||||
|
||||
enemyEncounterGroups.Groups.AddRange(MatchRefs(ebEncounterRefs, m12EncounterRefs));
|
||||
|
||||
// Enemy deaths
|
||||
var m12DeathRefs = ImportStringRefs("m12-enemy-deaths.json");
|
||||
var ebDeathRefs = ImportStringRefs("eb-enemy-deaths.json");
|
||||
|
||||
enemyDeathGroups.Groups.AddRange(MatchRefs(ebDeathRefs, m12DeathRefs));
|
||||
|
||||
// Raw M12
|
||||
var labels = Enumerable.Range(0, 5864);
|
||||
foreach (int i in labels)
|
||||
{
|
||||
rawM12Groups.Groups.Add(new MatchedGroup(i, "L" + i.ToString()));
|
||||
}
|
||||
|
||||
// Raw EB
|
||||
labels = Enumerable.Range(0, 5357);
|
||||
foreach (int i in labels)
|
||||
{
|
||||
rawEbGroups.Groups.Add(new MatchedGroup(Game.Eb, i, "L" + i.ToString()));
|
||||
}
|
||||
|
||||
matchedCollections.Add(tptGroups);
|
||||
matchedCollections.Add(battleActionGroups);
|
||||
matchedCollections.Add(itemHelpGroups);
|
||||
matchedCollections.Add(psiHelpGroups);
|
||||
matchedCollections.Add(enemyEncounterGroups);
|
||||
matchedCollections.Add(enemyDeathGroups);
|
||||
matchedCollections.Add(rawM12Groups);
|
||||
matchedCollections.Add(rawEbGroups);
|
||||
}
|
||||
|
||||
private MatchedGroup[] MatchRefs(MainStringRef[] ebRefs, MainStringRef[] m12Refs)
|
||||
{
|
||||
return ebRefs.Join(m12Refs, e => e.Index, m => m.Index,
|
||||
(e, m) => new { e, m })
|
||||
.Select(p => new MatchedGroup(p.e, p.m))
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
private MainStringRef[] ImportStringRefs(string fileName)
|
||||
{
|
||||
string jsonString = File.ReadAllText(Path.Combine(config.WorkingFolder, fileName));
|
||||
return JsonConvert.DeserializeObject<MainStringRef[]>(jsonString);
|
||||
}
|
||||
|
||||
private void ImportAllStrings()
|
||||
{
|
||||
string m12FileName = Path.Combine(config.WorkingFolder, "m12-strings.txt");
|
||||
string m12EnglishFileName = Path.Combine(config.WorkingFolder, "m12-strings-english.txt");
|
||||
string ebFileName = Path.Combine(config.WorkingFolder, "eb-strings.txt");
|
||||
|
||||
m12Strings = ImportStrings(m12FileName);
|
||||
m12StringsEnglish = ImportStrings(m12EnglishFileName);
|
||||
ebStrings = ImportStrings(ebFileName);
|
||||
}
|
||||
|
||||
private List<string> ImportStrings(string fileName)
|
||||
{
|
||||
return new List<string>(File.ReadAllLines(fileName).Where(l => !l.Equals("")));
|
||||
}
|
||||
|
||||
private Game GetCurrentGame()
|
||||
{
|
||||
if (ebSelector.Checked)
|
||||
return Game.Eb;
|
||||
|
||||
else if (m12Selector.Checked)
|
||||
return Game.M12;
|
||||
|
||||
return Game.None;
|
||||
}
|
||||
|
||||
private void PopulateCodeList()
|
||||
{
|
||||
codeList.Items.Clear();
|
||||
ISet<IControlCode> codes = null;
|
||||
|
||||
if (ebSelector.Checked)
|
||||
ebCompiler.ScanString(ebString.Text, ebCharLookup, true, out codes);
|
||||
|
||||
else if (m12Selector.Checked)
|
||||
m12Compiler.ScanString(m12String.Text, ebCharLookup, true, out codes);
|
||||
|
||||
var sorted = codes.Distinct().OrderBy(c => c).ToArray();
|
||||
codeList.Items.AddRange(sorted.ToArray());
|
||||
}
|
||||
|
||||
private void PopulateReferenceList()
|
||||
{
|
||||
referenceList.Items.Clear();
|
||||
IList<string> references = null;
|
||||
|
||||
if (ebSelector.Checked)
|
||||
ebCompiler.ScanString(ebString.Text, ebCharLookup, true, out references);
|
||||
|
||||
else if (m12Selector.Checked)
|
||||
m12Compiler.ScanString(m12String.Text, ebCharLookup, true, out references);
|
||||
|
||||
references = references.Distinct().OrderBy(r => r).ToList();
|
||||
referenceList.Items.AddRange(references.ToArray());
|
||||
}
|
||||
|
||||
private string GetString(Game game, MatchedGroup group)
|
||||
{
|
||||
int index;
|
||||
return GetString(game, group, out index);
|
||||
}
|
||||
|
||||
private string GetString(Game game, MatchedGroup group, out int index)
|
||||
{
|
||||
if (!group.Refs.ContainsKey(game))
|
||||
{
|
||||
index = -1;
|
||||
return null;
|
||||
}
|
||||
|
||||
return GetString(game, group.Refs[game].Label, out index);
|
||||
}
|
||||
|
||||
private string GetString(Game game, string label, out int index)
|
||||
{
|
||||
string labelDef = "^" + label + "^";
|
||||
var str = stringsLookup[game].Select((l, i) => new { Index = i, Line = l })
|
||||
.FirstOrDefault(a => a.Line.Contains(labelDef));
|
||||
|
||||
if (str == null)
|
||||
index = -1;
|
||||
else
|
||||
index = str.Index;
|
||||
|
||||
if (str == null)
|
||||
return null;
|
||||
else
|
||||
return str.Line;
|
||||
}
|
||||
|
||||
private void NavigateTo(MatchedGroup group, MatchedGroupCollection collection)
|
||||
{
|
||||
if (group == null)
|
||||
{
|
||||
ebString.Text = "";
|
||||
m12String.Text = "";
|
||||
m12StringEnglish.Text = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
int index;
|
||||
|
||||
string eb = GetString(Game.Eb, group, out index);
|
||||
currentIndex[Game.Eb] = index;
|
||||
|
||||
string m12 = GetString(Game.M12, group, out index);
|
||||
currentIndex[Game.M12] = index;
|
||||
|
||||
string m12English = GetString(Game.M12English, group, out index);
|
||||
currentIndex[Game.M12English] = index;
|
||||
|
||||
ebString.Text = eb;
|
||||
m12String.Text = m12;
|
||||
m12StringEnglish.Text = m12English;
|
||||
|
||||
previousNavigationState = new MatchedGroupNavigationEntry(group, collection);
|
||||
|
||||
if (m12 != null && m12 == m12Compiler.StripText(m12))
|
||||
{
|
||||
m12String.BackColor = Color.Orange;
|
||||
}
|
||||
else
|
||||
{
|
||||
m12String.BackColor = SystemColors.Control;
|
||||
}
|
||||
}
|
||||
|
||||
PopulateCodeList();
|
||||
PopulateReferenceList();
|
||||
|
||||
previewButton_Click(null, null);
|
||||
}
|
||||
|
||||
private void SelectGroup(MatchedGroup group, MatchedGroupCollection collection)
|
||||
{
|
||||
if (collection != null)
|
||||
{
|
||||
if ((MatchedGroupCollection)collectionSelector.SelectedItem !=
|
||||
collection)
|
||||
{
|
||||
collectionSelector.SelectedItem = collection;
|
||||
PopulateGroupSelector(collection);
|
||||
}
|
||||
|
||||
if (group != null)
|
||||
{
|
||||
groupSelector.SelectedItem = group;
|
||||
}
|
||||
else
|
||||
{
|
||||
groupSelector.SelectedIndex = -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
collectionSelector.SelectedIndex = -1;
|
||||
groupSelector.SelectedIndex = -1;
|
||||
}
|
||||
|
||||
currentCollection = collection;
|
||||
}
|
||||
|
||||
private void FindGroup(Game game, string label, out MatchedGroup group, out MatchedGroupCollection collection)
|
||||
{
|
||||
// Attempt to find the label
|
||||
string labelDef = "^" + label + "^";
|
||||
string str = stringsLookup[game].First(s => s.Contains(labelDef));
|
||||
|
||||
foreach (var coll in matchedCollections.Where(c => c.Games.Contains(game)))
|
||||
{
|
||||
var match = coll.Groups.FirstOrDefault(g => str.Contains("^" + g.Refs[game].Label + "^"));
|
||||
if (match != null)
|
||||
{
|
||||
group = match;
|
||||
collection = coll;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
group = null;
|
||||
collection = null;
|
||||
}
|
||||
|
||||
private void NavigateTo(Game game, string label, out MatchedGroup group, out MatchedGroupCollection collection)
|
||||
{
|
||||
foreach (var eachGame in validGames)
|
||||
{
|
||||
currentIndex[eachGame] = -1;
|
||||
textboxLookup[eachGame].Text = "";
|
||||
}
|
||||
|
||||
string labelDef = "^" + label + "^";
|
||||
|
||||
int index;
|
||||
textboxLookup[game].Text = GetString(game, label, out index);
|
||||
currentIndex[game] = index;
|
||||
|
||||
if (game == Game.M12 || game == Game.M12English)
|
||||
{
|
||||
if (game == Game.M12)
|
||||
{
|
||||
textboxLookup[Game.M12English].Text = GetString(Game.M12English, label, out index);
|
||||
currentIndex[Game.M12English] = index;
|
||||
}
|
||||
else if (game == Game.M12English)
|
||||
{
|
||||
textboxLookup[Game.M12].Text = GetString(Game.M12, label, out index);
|
||||
currentIndex[Game.M12] = index;
|
||||
}
|
||||
|
||||
string m12 = textboxLookup[Game.M12].Text;
|
||||
if (m12 != null && m12 == m12Compiler.StripText(m12))
|
||||
{
|
||||
m12String.BackColor = Color.Orange;
|
||||
}
|
||||
else
|
||||
{
|
||||
m12String.BackColor = SystemColors.Control;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m12String.BackColor = SystemColors.Control;
|
||||
}
|
||||
|
||||
previousNavigationState = new ReferenceNavigationEntry(game, label);
|
||||
|
||||
FindGroup(game, label, out group, out collection);
|
||||
|
||||
// Check if any other games have this matched ref
|
||||
if (group != null)
|
||||
{
|
||||
foreach (var otherGame in group.Refs.Where(kv => kv.Key != game))
|
||||
{
|
||||
labelDef = "^" + otherGame.Value.Label + "^";
|
||||
textboxLookup[otherGame.Key].Text = GetString(otherGame.Key, otherGame.Value.Label, out index);
|
||||
currentIndex[otherGame.Key] = index;
|
||||
}
|
||||
}
|
||||
|
||||
PopulateCodeList();
|
||||
PopulateReferenceList();
|
||||
|
||||
previewButton_Click(null, null);
|
||||
}
|
||||
|
||||
private void PushPreviousNavigationState()
|
||||
{
|
||||
if (previousNavigationState == null)
|
||||
return;
|
||||
|
||||
navigationStack.Push(previousNavigationState);
|
||||
}
|
||||
|
||||
private async void SaveCurrentState(bool insertEndcode)
|
||||
{
|
||||
string endcodeInsertion = null;
|
||||
|
||||
lock (changeLock)
|
||||
{
|
||||
foreach (var game in validGames)
|
||||
{
|
||||
if (currentIndex[game] >= 0)
|
||||
{
|
||||
string oldString = stringsLookup[game][currentIndex[game]];
|
||||
string newString = textboxLookup[game].Text.Replace(Environment.NewLine, "");
|
||||
|
||||
if (game == Game.M12English)
|
||||
{
|
||||
if (oldString != newString)
|
||||
{
|
||||
changesMade = true;
|
||||
}
|
||||
|
||||
if (insertEndcode)
|
||||
{
|
||||
// Special case -- for M12 English, if the line is modified,
|
||||
// check for an end code and insert if it's missing
|
||||
var lastCode = m12Compiler.GetLastControlCode(newString);
|
||||
|
||||
if (!IsJustALabel(newString) && (lastCode == null || (lastCode != null
|
||||
&& !lastCode.IsEnd)))
|
||||
{
|
||||
newString += "[00 FF]";
|
||||
endcodeInsertion = "Inserted missing [00 FF]";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stringsLookup[game][currentIndex[game]] = newString;
|
||||
|
||||
if (!textboxLookup[game].Text.Equals(newString))
|
||||
{
|
||||
// Update the text box as well
|
||||
textboxLookup[game].Text = newString;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (endcodeInsertion != null)
|
||||
{
|
||||
await SetMessageLabel(endcodeInsertion);
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsJustALabel(string str)
|
||||
{
|
||||
return (str.Length > 2) && (str[0] == '^') &&
|
||||
(str[str.Length - 1] == '^') && !str.Skip(1).Take(str.Length - 2).Contains('^');
|
||||
}
|
||||
|
||||
private void WriteChanges(bool insertEndcode)
|
||||
{
|
||||
SaveCurrentState(insertEndcode);
|
||||
|
||||
lock (changeLock)
|
||||
{
|
||||
//if (changesMade)
|
||||
{
|
||||
using (StreamWriter sw = File.CreateText(Path.Combine(config.WorkingFolder, "m12-strings-english.txt")))
|
||||
{
|
||||
foreach (string line in m12StringsEnglish)
|
||||
{
|
||||
sw.WriteLine(line);
|
||||
}
|
||||
}
|
||||
|
||||
UpdateStatus(String.Format("Last saved: {0:G}", DateTime.Now));
|
||||
changesMade = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static IList<string> ExtractLabels(string str)
|
||||
{
|
||||
if (str == null)
|
||||
return null;
|
||||
|
||||
var labels = new List<string>();
|
||||
|
||||
for (int i = 0; i < str.Length; )
|
||||
{
|
||||
// Find the first caret
|
||||
if (str[i] == '^')
|
||||
{
|
||||
// Find the next caret
|
||||
bool foundNext = false;
|
||||
for (int j = i + 1; j < str.Length; j++)
|
||||
{
|
||||
if (str[j] == '^')
|
||||
{
|
||||
// Get the label
|
||||
string label = str.Substring(i + 1, j - i - 1);
|
||||
labels.Add(label);
|
||||
|
||||
i = j + 1;
|
||||
foundNext = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!foundNext)
|
||||
{
|
||||
throw new Exception("Found opening caret with no closing caret: " + str);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
return labels;
|
||||
}
|
||||
|
||||
private void UpdateStatus(string text)
|
||||
{
|
||||
if (statusBar.InvokeRequired)
|
||||
{
|
||||
statusBar.Invoke(new Action<string>(UpdateStatus), text);
|
||||
}
|
||||
else
|
||||
{
|
||||
writeLabel.Text = text;
|
||||
}
|
||||
}
|
||||
|
||||
private void groupSelector_SelectionChangeCommitted(object sender, EventArgs e)
|
||||
{
|
||||
SaveCurrentState(true);
|
||||
|
||||
if (groupSelector.SelectedIndex == -1)
|
||||
{
|
||||
NavigateTo(null, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
PushPreviousNavigationState();
|
||||
|
||||
var currentGroup = (MatchedGroup)groupSelector.SelectedItem;
|
||||
var currentCollection = (MatchedGroupCollection)collectionSelector.SelectedItem;
|
||||
|
||||
NavigateTo(currentGroup, currentCollection);
|
||||
}
|
||||
}
|
||||
|
||||
private void gameSelector_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
PopulateCodeList();
|
||||
PopulateReferenceList();
|
||||
}
|
||||
|
||||
private void referenceList_MouseDoubleClick(object sender, MouseEventArgs e)
|
||||
{
|
||||
int match = referenceList.IndexFromPoint(e.Location);
|
||||
if (match != ListBox.NoMatches)
|
||||
{
|
||||
Game game = GetCurrentGame();
|
||||
string label = (string)referenceList.SelectedItem;
|
||||
|
||||
// Only navigate if we're not already at the target label
|
||||
if (!stringsLookup[game].Contains("^" + label + "^"))
|
||||
{
|
||||
SaveCurrentState(true);
|
||||
PushPreviousNavigationState();
|
||||
|
||||
MatchedGroup group;
|
||||
MatchedGroupCollection collection;
|
||||
NavigateTo(game, label, out group, out collection);
|
||||
SelectGroup(group, collection);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void backButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (navigationStack.Count < 1)
|
||||
return;
|
||||
|
||||
SaveCurrentState(true);
|
||||
|
||||
var nav = navigationStack.Pop();
|
||||
|
||||
if (nav.Type == NavigationType.MatchedGroup)
|
||||
{
|
||||
var matchedEntry = (MatchedGroupNavigationEntry)nav;
|
||||
NavigateTo(matchedEntry.Group, matchedEntry.Collection);
|
||||
SelectGroup(matchedEntry.Group, matchedEntry.Collection);
|
||||
}
|
||||
else if (nav.Type == NavigationType.Reference)
|
||||
{
|
||||
var referenceEntry = (ReferenceNavigationEntry)nav;
|
||||
MatchedGroup group;
|
||||
MatchedGroupCollection collection;
|
||||
NavigateTo(referenceEntry.Game, referenceEntry.Label, out group, out collection);
|
||||
SelectGroup(group, collection);
|
||||
}
|
||||
}
|
||||
|
||||
private void saveMenu_Click(object sender, EventArgs e)
|
||||
{
|
||||
WriteChanges(true);
|
||||
}
|
||||
|
||||
private void writeTimer_Tick(object sender, EventArgs e)
|
||||
{
|
||||
WriteChanges(false);
|
||||
}
|
||||
|
||||
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
if (badStart)
|
||||
return;
|
||||
|
||||
writeTimer.Enabled = false;
|
||||
WriteChanges(true);
|
||||
}
|
||||
|
||||
private void copyCodesButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
m12StringEnglish.Text = m12Compiler.StripText(m12String.Text);
|
||||
groupSelector.Focus();
|
||||
}
|
||||
|
||||
private void collectionSelector_SelectionChangeCommitted(object sender, EventArgs e)
|
||||
{
|
||||
if (collectionSelector.SelectedIndex == -1)
|
||||
{
|
||||
groupSelector.Items.Clear();
|
||||
previewer.DisplayString(null, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
var collection = (MatchedGroupCollection)collectionSelector.SelectedItem;
|
||||
|
||||
// Set the previewer width before we do navigation stuff
|
||||
if (collection == psiHelpGroups)
|
||||
{
|
||||
previewer.MaxWidth = 224;
|
||||
}
|
||||
else if (collection == battleActionGroups)
|
||||
{
|
||||
previewer.MaxWidth = 176;
|
||||
}
|
||||
else
|
||||
{
|
||||
previewer.MaxWidth = 144;
|
||||
}
|
||||
|
||||
// Take no action if we haven't actually changed the collection
|
||||
// (otherwise, the group selector would jump to 0, probably unwanted)
|
||||
if (collection == currentCollection)
|
||||
return;
|
||||
|
||||
currentCollection = collection;
|
||||
PopulateGroupSelector(collection);
|
||||
|
||||
groupSelector.SelectedIndex = 0;
|
||||
groupSelector_SelectionChangeCommitted(null, null);
|
||||
}
|
||||
}
|
||||
|
||||
private void previewButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
previewer.DisplayString(m12StringEnglish.Text, true);
|
||||
}
|
||||
|
||||
private void m12StringEnglish_MouseClick(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (ModifierKeys == Keys.Control)
|
||||
{
|
||||
// Insert a line break
|
||||
int currentSelectionStart = m12StringEnglish.SelectionStart;
|
||||
m12StringEnglish.Text = m12StringEnglish.Text.Insert(m12StringEnglish.SelectionStart, "[01 FF]");
|
||||
m12StringEnglish.SelectionStart = currentSelectionStart + 7;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task SetMessageLabel(string message)
|
||||
{
|
||||
var messageLabel = new ToolStripStatusLabel(message);
|
||||
messageLabel.Font = new Font(messageLabel.Font, FontStyle.Bold);
|
||||
messageLabel.BackColor = SystemColors.Highlight;
|
||||
statusBar.Items.Add(messageLabel);
|
||||
|
||||
await Task.Delay(3000);
|
||||
|
||||
statusBar.Items.Remove(messageLabel);
|
||||
}
|
||||
|
||||
private void resolveDuplicateLabelsMenu_Click(object sender, EventArgs e)
|
||||
{
|
||||
SaveCurrentState(false);
|
||||
|
||||
try
|
||||
{
|
||||
// Enumerate all labels
|
||||
var labels = m12StringsEnglish.Select((s, i) => new { Labels = ExtractLabels(s), Index = i });
|
||||
|
||||
// Find duplicates
|
||||
var flattened = labels.SelectMany(l => l.Labels.Select(b => new { Label = b, Index = l.Index }));
|
||||
var duplicates = flattened.GroupBy(f => f.Label)
|
||||
.Where(g => g.Count() > 1)
|
||||
.Select(g => new
|
||||
{
|
||||
Label = g.Key,
|
||||
Indices = g.Select(r => new { Index = r.Index, Trivial = IsJustALabel(m12StringsEnglish[r.Index]) }).ToList()
|
||||
})
|
||||
.ToList();
|
||||
|
||||
// Find the duplicates that can be resolved
|
||||
var canBeResolved = duplicates.Where(d => d.Indices.Where(i => !i.Trivial).Count() <= 1).ToList();
|
||||
|
||||
// Find the duplicates that can't be resolved
|
||||
var cantBeResolved = duplicates.Where(d => d.Indices.Where(i => !i.Trivial).Count() > 1).ToList();
|
||||
|
||||
if (duplicates.Count == 0)
|
||||
{
|
||||
MessageBox.Show("No duplicates found.", "Duplicates", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
}
|
||||
else
|
||||
{
|
||||
string message = "Duplicates were found.";
|
||||
|
||||
if (canBeResolved.Count > 0)
|
||||
{
|
||||
message += Environment.NewLine + Environment.NewLine +
|
||||
"The following duplicates may be resolved automatically:" + Environment.NewLine +
|
||||
String.Join(", ", canBeResolved.Select(d => d.Label).ToArray());
|
||||
}
|
||||
|
||||
if (cantBeResolved.Count > 0)
|
||||
{
|
||||
message += Environment.NewLine + Environment.NewLine +
|
||||
"The following duplicates cannot be resolved manually:" + Environment.NewLine +
|
||||
String.Join(", ", cantBeResolved.Select(d => d.Label).ToArray());
|
||||
}
|
||||
|
||||
if (canBeResolved.Count > 0)
|
||||
{
|
||||
message += Environment.NewLine + Environment.NewLine +
|
||||
"Would you like to fix the resolvable duplicates now?";
|
||||
|
||||
var dialogResult = MessageBox.Show(message, "Duplicates", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
|
||||
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
// The trivial duplicates may simply be removed from the strings collection
|
||||
|
||||
// Unless, however, a label has no non-trivial duplicates; in that case, keep one of them
|
||||
var noNonTrivial = canBeResolved.Where(d => !d.Indices.Any(i => !i.Trivial));
|
||||
foreach (var toBeSaved in noNonTrivial)
|
||||
toBeSaved.Indices.RemoveAt(0);
|
||||
|
||||
var toBeRemoved = canBeResolved.Where(d => d.Indices.Any(i => !i.Trivial))
|
||||
.Concat(noNonTrivial)
|
||||
.SelectMany(d => d.Indices)
|
||||
.Where(i => i.Trivial)
|
||||
.Select(i => i.Index)
|
||||
.Distinct()
|
||||
.OrderByDescending(i => i);
|
||||
|
||||
// If there are no non-trivial duplicates, we must leave exactly one trivial duplicate
|
||||
// Make sure we aren't currently on a string that's about to be removed (shouldn't ever actually happen...)
|
||||
if (toBeRemoved.Any(i => i == currentIndex[Game.M12English]))
|
||||
{
|
||||
MessageBox.Show("Could not remove duplicates because one of them is currently selected! Navigate away first.",
|
||||
"Could not resolve", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (int i in toBeRemoved)
|
||||
{
|
||||
// Remove the string
|
||||
m12StringsEnglish.RemoveAt(i);
|
||||
|
||||
// Update currentIndex
|
||||
if (currentIndex[Game.M12English] > i)
|
||||
{
|
||||
currentIndex[Game.M12English]--;
|
||||
}
|
||||
}
|
||||
|
||||
MessageBox.Show("Duplicates removed!", "Finished", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show(message, "Duplicates", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error extracting labels. " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private void checkCompletionMenu_Click(object sender, EventArgs e)
|
||||
{
|
||||
int completedCount = m12StringsEnglish.Count(s => !IsJustALabel(s));
|
||||
int total = m12StringsEnglish.Count;
|
||||
MessageBox.Show(String.Format("Completed: {0}/{1} ({2:F2}%)", completedCount, total, (double)completedCount * 100d / (double)total));
|
||||
}
|
||||
|
||||
private void prevButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (groupSelector.SelectedIndex < 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
groupSelector.SelectedIndex--;
|
||||
groupSelector_SelectionChangeCommitted(null, null);
|
||||
}
|
||||
|
||||
private void nextButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (groupSelector.SelectedIndex == -1 || groupSelector.SelectedIndex == groupSelector.Items.Count - 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
groupSelector.SelectedIndex++;
|
||||
groupSelector_SelectionChangeCommitted(null, null);
|
||||
}
|
||||
|
||||
private void autosaveMenu_Click(object sender, EventArgs e)
|
||||
{
|
||||
writeTimer.Enabled = autosaveMenu.Checked;
|
||||
}
|
||||
|
||||
private void translateButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
string toTranslate = StripCodes(m12String.Text);
|
||||
Translate(toTranslate);
|
||||
}
|
||||
|
||||
private void Translate(string toTranslate)
|
||||
{
|
||||
var builder = new StringBuilder();
|
||||
builder.Append("https://translate.google.com/#ja/en/");
|
||||
|
||||
var bytes = Encoding.UTF8.GetBytes(toTranslate);
|
||||
foreach (byte b in bytes)
|
||||
{
|
||||
builder.Append('%');
|
||||
builder.Append(b.ToString("X2"));
|
||||
}
|
||||
|
||||
System.Diagnostics.Process.Start(builder.ToString());
|
||||
}
|
||||
|
||||
private string StripCodes(string str)
|
||||
{
|
||||
var builder = new StringBuilder();
|
||||
bool inCode = false;
|
||||
foreach(char c in str)
|
||||
{
|
||||
if (c == '[')
|
||||
{
|
||||
inCode = true;
|
||||
}
|
||||
else if (c == ']')
|
||||
{
|
||||
inCode = false;
|
||||
builder.Append(' ');
|
||||
}
|
||||
else if (c == '^')
|
||||
{
|
||||
inCode = !inCode;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!inCode)
|
||||
builder.Append(c);
|
||||
}
|
||||
}
|
||||
return builder.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
enum Game
|
||||
{
|
||||
None,
|
||||
Eb,
|
||||
M2,
|
||||
M12,
|
||||
M12English
|
||||
}
|
||||
}
|
|
@ -0,0 +1,129 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="mainMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="statusBar.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>127, 17</value>
|
||||
</metadata>
|
||||
<metadata name="writeTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>228, 17</value>
|
||||
</metadata>
|
||||
</root>
|
|
@ -0,0 +1,63 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using ScriptTool;
|
||||
|
||||
namespace ScriptToolGui
|
||||
{
|
||||
class MatchedGroup
|
||||
{
|
||||
public IDictionary<Game, IndexLabel> Refs { get; private set; }
|
||||
|
||||
public MatchedGroup()
|
||||
{
|
||||
Refs = new Dictionary<Game, IndexLabel>();
|
||||
}
|
||||
|
||||
public MatchedGroup(MainStringRef ebRef, MainStringRef m12Ref)
|
||||
: this()
|
||||
{
|
||||
Refs.Add(Game.Eb, new IndexLabel(ebRef));
|
||||
Refs.Add(Game.M12, new IndexLabel(m12Ref));
|
||||
Refs.Add(Game.M12English, new IndexLabel(m12Ref));
|
||||
}
|
||||
|
||||
public MatchedGroup(MainStringRef m12Ref)
|
||||
: this()
|
||||
{
|
||||
Refs.Add(Game.M12, new IndexLabel(m12Ref));
|
||||
Refs.Add(Game.M12English, new IndexLabel(m12Ref));
|
||||
}
|
||||
|
||||
public MatchedGroup(int m12Index, string m12Label)
|
||||
: this()
|
||||
{
|
||||
Refs.Add(Game.M12, new IndexLabel(m12Index, m12Label));
|
||||
Refs.Add(Game.M12English, new IndexLabel(m12Index, m12Label));
|
||||
}
|
||||
|
||||
public MatchedGroup(Game game, int index, string label)
|
||||
: this()
|
||||
{
|
||||
Refs.Add(game, new IndexLabel(index, label));
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
var parts = new List<string>();
|
||||
|
||||
if (Refs.ContainsKey(Game.Eb))
|
||||
{
|
||||
parts.Add(String.Format("[{0:D4}] EB: {1}", Refs[Game.Eb].Index, Refs[Game.Eb].Label));
|
||||
}
|
||||
if (Refs.ContainsKey(Game.M12))
|
||||
{
|
||||
parts.Add(String.Format("[{0:D4}] M12: {1}", Refs[Game.M12].Index, Refs[Game.M12].Label));
|
||||
}
|
||||
|
||||
return String.Join(" / ", parts.ToArray());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ScriptToolGui
|
||||
{
|
||||
class MatchedGroupCollection : IEnumerable<MatchedGroup>
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public List<MatchedGroup> Groups { get; private set; }
|
||||
public List<Game> Games { get; private set; }
|
||||
|
||||
public MatchedGroupCollection(string name, params Game[] games)
|
||||
{
|
||||
Name = name;
|
||||
Groups = new List<MatchedGroup>();
|
||||
Games = new List<Game>(games);
|
||||
}
|
||||
|
||||
public void SortGroups()
|
||||
{
|
||||
Groups.Sort((g1, g2) => g1.Refs[Game.Eb].Index.CompareTo(g2.Refs[Game.Eb].Index));
|
||||
}
|
||||
|
||||
public IEnumerator<MatchedGroup> GetEnumerator()
|
||||
{
|
||||
return Groups.GetEnumerator();
|
||||
}
|
||||
|
||||
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
|
||||
{
|
||||
return GetEnumerator();
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Name;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ScriptToolGui
|
||||
{
|
||||
abstract class NavigationEntry
|
||||
{
|
||||
public abstract NavigationType Type { get; }
|
||||
}
|
||||
|
||||
enum NavigationType
|
||||
{
|
||||
MatchedGroup,
|
||||
Reference
|
||||
}
|
||||
|
||||
class MatchedGroupNavigationEntry : NavigationEntry
|
||||
{
|
||||
public override NavigationType Type { get { return NavigationType.MatchedGroup; } }
|
||||
|
||||
public MatchedGroup Group { get; private set; }
|
||||
public MatchedGroupCollection Collection { get; private set; }
|
||||
|
||||
public MatchedGroupNavigationEntry(MatchedGroup group, MatchedGroupCollection collection)
|
||||
{
|
||||
Group = group;
|
||||
Collection = collection;
|
||||
}
|
||||
}
|
||||
|
||||
class ReferenceNavigationEntry : NavigationEntry
|
||||
{
|
||||
public override NavigationType Type { get { return NavigationType.Reference; } }
|
||||
|
||||
public string Label { get; private set; }
|
||||
public Game Game { get; private set; }
|
||||
|
||||
public ReferenceNavigationEntry(Game game, string label)
|
||||
{
|
||||
Game = game;
|
||||
Label = label;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace ScriptToolGui
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new MainForm());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="ScriptTool">
|
||||
<HintPath>..\ScriptTool\bin\$(Configuration)\netcoreapp2.1\ScriptTool.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="config.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="eb-char-lookup.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="eb-codelist.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="eb-compressed-strings.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="item-map.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="m12-char-lookup.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="m12-codelist.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="m2-widths-main.bin">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="m2-widths-saturn.bin">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -0,0 +1,62 @@
|
|||
namespace ScriptToolGui
|
||||
{
|
||||
partial class StringPreviewer
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.stringPanel = new System.Windows.Forms.FlowLayoutPanel();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// stringPanel
|
||||
//
|
||||
this.stringPanel.AutoSize = true;
|
||||
this.stringPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||
this.stringPanel.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;
|
||||
this.stringPanel.Location = new System.Drawing.Point(0, 0);
|
||||
this.stringPanel.Name = "stringPanel";
|
||||
this.stringPanel.Size = new System.Drawing.Size(0, 0);
|
||||
this.stringPanel.TabIndex = 0;
|
||||
//
|
||||
// StringPreviewer
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.AutoScroll = true;
|
||||
this.Controls.Add(this.stringPanel);
|
||||
this.Name = "StringPreviewer";
|
||||
this.Size = new System.Drawing.Size(324, 105);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.FlowLayoutPanel stringPanel;
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,90 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using ScriptTool;
|
||||
|
||||
namespace ScriptToolGui
|
||||
{
|
||||
public partial class StringPreviewer : UserControl
|
||||
{
|
||||
public Compiler M12Compiler { get; set; }
|
||||
public IDictionary<byte, string> CharLookup { get; set; }
|
||||
|
||||
public int MaxWidth { get; set; }
|
||||
|
||||
public StringPreviewer()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void RedrawFancy(string str)
|
||||
{
|
||||
stringPanel.Controls.Clear();
|
||||
|
||||
if (M12Compiler == null || CharLookup == null || str == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
IList<int> widths;
|
||||
IList<string> parsed = M12Compiler.FormatPreviewM12(str, out widths, CharLookup);
|
||||
|
||||
for (int i = 0; i < parsed.Count; i++)
|
||||
{
|
||||
var label = new Label();
|
||||
label.AutoSize = true;
|
||||
label.Text = parsed[i] + " (" + widths[i] + ")";
|
||||
|
||||
if (widths[i] <= MaxWidth)
|
||||
label.ForeColor = Color.Green;
|
||||
else
|
||||
label.ForeColor = Color.Red;
|
||||
|
||||
stringPanel.Controls.Add(label);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
stringPanel.Controls.Clear();
|
||||
|
||||
var errLabel = new Label();
|
||||
errLabel.AutoSize = true;
|
||||
errLabel.Font = new Font(errLabel.Font, FontStyle.Bold);
|
||||
errLabel.Text = "Error: " + e.Message;
|
||||
|
||||
stringPanel.Controls.Add(errLabel);
|
||||
}
|
||||
}
|
||||
|
||||
private void RedrawPlain(string str)
|
||||
{
|
||||
stringPanel.Controls.Clear();
|
||||
|
||||
if (str == null)
|
||||
return;
|
||||
|
||||
var label = new Label
|
||||
{
|
||||
AutoSize = true,
|
||||
Text = str
|
||||
};
|
||||
stringPanel.Controls.Add(label);
|
||||
}
|
||||
|
||||
public void DisplayString(string str, bool fancy)
|
||||
{
|
||||
if (fancy)
|
||||
RedrawFancy(str);
|
||||
else
|
||||
RedrawPlain(str);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,120 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"WorkingFolder": "..\\..\\..\\..\\..\\working"
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
{
|
||||
"80": " ",
|
||||
"81": "!",
|
||||
"82": "\"",
|
||||
"83": "#",
|
||||
"84": "$",
|
||||
"85": "%",
|
||||
"86": "&",
|
||||
"87": "'",
|
||||
"88": "(",
|
||||
"89": ")",
|
||||
"90": "*",
|
||||
"91": "+",
|
||||
"92": ",",
|
||||
"93": "-",
|
||||
"94": ".",
|
||||
"95": "/",
|
||||
"96": "0",
|
||||
"97": "1",
|
||||
"98": "2",
|
||||
"99": "3",
|
||||
"100": "4",
|
||||
"101": "5",
|
||||
"102": "6",
|
||||
"103": "7",
|
||||
"104": "8",
|
||||
"105": "9",
|
||||
"106": ":",
|
||||
"107": ";",
|
||||
"108": "<",
|
||||
"109": "=",
|
||||
"110": ">",
|
||||
"111": "?",
|
||||
"112": "@",
|
||||
"113": "A",
|
||||
"114": "B",
|
||||
"115": "C",
|
||||
"116": "D",
|
||||
"117": "E",
|
||||
"118": "F",
|
||||
"119": "G",
|
||||
"120": "H",
|
||||
"121": "I",
|
||||
"122": "J",
|
||||
"123": "K",
|
||||
"124": "L",
|
||||
"125": "M",
|
||||
"126": "N",
|
||||
"127": "O",
|
||||
"128": "P",
|
||||
"129": "Q",
|
||||
"130": "R",
|
||||
"131": "S",
|
||||
"132": "T",
|
||||
"133": "U",
|
||||
"134": "V",
|
||||
"135": "W",
|
||||
"136": "X",
|
||||
"137": "Y",
|
||||
"138": "Z",
|
||||
"139": "[8B]",
|
||||
"140": "[8C]",
|
||||
"141": "[8D]",
|
||||
"142": "[8E]",
|
||||
"143": "[8F]",
|
||||
"144": "`",
|
||||
"145": "a",
|
||||
"146": "b",
|
||||
"147": "c",
|
||||
"148": "d",
|
||||
"149": "e",
|
||||
"150": "f",
|
||||
"151": "g",
|
||||
"152": "h",
|
||||
"153": "i",
|
||||
"154": "j",
|
||||
"155": "k",
|
||||
"156": "l",
|
||||
"157": "m",
|
||||
"158": "n",
|
||||
"159": "o",
|
||||
"160": "p",
|
||||
"161": "q",
|
||||
"162": "r",
|
||||
"163": "s",
|
||||
"164": "t",
|
||||
"165": "u",
|
||||
"166": "v",
|
||||
"167": "w",
|
||||
"168": "x",
|
||||
"169": "y",
|
||||
"170": "z",
|
||||
"171": "{",
|
||||
"172": "|",
|
||||
"173": "}",
|
||||
"174": "~",
|
||||
"175": "\\",
|
||||
"189": "➨"
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,768 @@
|
|||
|
||||
in the
|
||||
that
|
||||
...
|
||||
and
|
||||
this
|
||||
to the
|
||||
about
|
||||
just
|
||||
of the
|
||||
something
|
||||
going to
|
||||
to
|
||||
you have
|
||||
your
|
||||
for
|
||||
you're
|
||||
@You
|
||||
really
|
||||
don't
|
||||
@The
|
||||
e the
|
||||
e you
|
||||
...
|
||||
the
|
||||
will
|
||||
...Brick Road
|
||||
ing
|
||||
some
|
||||
|
||||
@Do you want to
|
||||
like
|
||||
ou don't have
|
||||
is
|
||||
you
|
||||
you
|
||||
anything else
|
||||
the
|
||||
you want to
|
||||
for the
|
||||
friend
|
||||
at the
|
||||
ould you like
|
||||
from
|
||||
would
|
||||
he Runaway Five
|
||||
with
|
||||
want to
|
||||
@If you
|
||||
you don't
|
||||
s the
|
||||
ed to
|
||||
e...
|
||||
something
|
||||
t the
|
||||
@...
|
||||
@Please
|
||||
's
|
||||
of your
|
||||
@It's
|
||||
@Thank you
|
||||
@I
|
||||
here.
|
||||
in
|
||||
@Do you
|
||||
I'll
|
||||
have
|
||||
e of
|
||||
d you
|
||||
@I'm
|
||||
me to
|
||||
@I don't
|
||||
@Well,
|
||||
@This is
|
||||
ed the
|
||||
@You're
|
||||
for a
|
||||
anything
|
||||
ing
|
||||
of
|
||||
you should
|
||||
I
|
||||
from the
|
||||
s...
|
||||
it's
|
||||
time
|
||||
e to
|
||||
ed
|
||||
e of the
|
||||
to you
|
||||
n't you
|
||||
again
|
||||
for you.
|
||||
other
|
||||
ation
|
||||
little
|
||||
ing to
|
||||
can't
|
||||
much
|
||||
someone
|
||||
on the
|
||||
looks like
|
||||
don't you
|
||||
very
|
||||
the
|
||||
can
|
||||
you
|
||||
that you
|
||||
it
|
||||
you want
|
||||
ou can't
|
||||
able to
|
||||
already
|
||||
give you
|
||||
understand
|
||||
|
||||
my
|
||||
you can
|
||||
that
|
||||
what
|
||||
here's
|
||||
there
|
||||
n the
|
||||
@What
|
||||
Thank you
|
||||
I can't
|
||||
one
|
||||
@The
|
||||
thought
|
||||
not
|
||||
You should
|
||||
ou know
|
||||
has
|
||||
back
|
||||
of
|
||||
ve been
|
||||
I'm
|
||||
there
|
||||
with you
|
||||
@I heard
|
||||
in
|
||||
here
|
||||
Fourside
|
||||
I wonder
|
||||
to
|
||||
could
|
||||
think
|
||||
out
|
||||
good
|
||||
the
|
||||
You
|
||||
too much
|
||||
ome back
|
||||
t...
|
||||
here
|
||||
thing
|
||||
come
|
||||
ly
|
||||
ent
|
||||
strong
|
||||
money.
|
||||
@I'll
|
||||
an
|
||||
ou must
|
||||
are you
|
||||
with the
|
||||
on your
|
||||
too many
|
||||
you.
|
||||
know
|
||||
to be
|
||||
around
|
||||
if you
|
||||
@Are you
|
||||
ome again
|
||||
e and
|
||||
more
|
||||
think
|
||||
e your
|
||||
@Don't
|
||||
nd the
|
||||
t to
|
||||
rea
|
||||
he
|
||||
me
|
||||
strange
|
||||
for you
|
||||
ight
|
||||
a
|
||||
be
|
||||
ther
|
||||
all
|
||||
cannot
|
||||
here is
|
||||
You have
|
||||
Monotoli
|
||||
was
|
||||
ll you
|
||||
hat
|
||||
, but
|
||||
stuff
|
||||
eep
|
||||
it
|
||||
didn't
|
||||
like th
|
||||
ll right
|
||||
should
|
||||
over
|
||||
@Oh,
|
||||
hear
|
||||
every
|
||||
I'm not
|
||||
about t
|
||||
zombies
|
||||
damage
|
||||
his is
|
||||
all
|
||||
some
|
||||
@It
|
||||
attack
|
||||
right
|
||||
ally
|
||||
orry
|
||||
ess
|
||||
er
|
||||
@That's
|
||||
carry it
|
||||
ake
|
||||
t was
|
||||
, the
|
||||
n you
|
||||
sn't
|
||||
help
|
||||
king
|
||||
ear
|
||||
ing the
|
||||
It's
|
||||
very
|
||||
talking
|
||||
ou've
|
||||
that's
|
||||
to me
|
||||
@Hello
|
||||
enemy
|
||||
you are
|
||||
by
|
||||
IBNT
|
||||
ight
|
||||
on't
|
||||
est
|
||||
ick
|
||||
power
|
||||
s that
|
||||
s are
|
||||
call
|
||||
t is
|
||||
is
|
||||
age
|
||||
, and
|
||||
great
|
||||
@Thanks
|
||||
people
|
||||
ter
|
||||
not
|
||||
ill
|
||||
ness
|
||||
@This
|
||||
into
|
||||
ha
|
||||
I can
|
||||
t your
|
||||
before
|
||||
things
|
||||
tion
|
||||
for
|
||||
be
|
||||
this
|
||||
Happy
|
||||
You
|
||||
out
|
||||
enough
|
||||
I'm
|
||||
@You
|
||||
go
|
||||
for
|
||||
all th
|
||||
though
|
||||
ing you
|
||||
e you
|
||||
ring
|
||||
one
|
||||
get
|
||||
t you
|
||||
@I'm s
|
||||
the s
|
||||
e's
|
||||
port
|
||||
d...
|
||||
out
|
||||
@What
|
||||
get
|
||||
I have
|
||||
looking
|
||||
n this
|
||||
of my
|
||||
have a
|
||||
ent
|
||||
do
|
||||
d of
|
||||
ting
|
||||
ncrease
|
||||
Twoson
|
||||
through
|
||||
s your
|
||||
ou'll
|
||||
place
|
||||
right
|
||||
Onett
|
||||
|
||||
our
|
||||
too
|
||||
ater
|
||||
be
|
||||
ain
|
||||
ing.
|
||||
take
|
||||
e is
|
||||
the
|
||||
please
|
||||
do you
|
||||
need
|
||||
use
|
||||
now.
|
||||
got
|
||||
|
||||
and
|
||||
ning
|
||||
sta
|
||||
the t
|
||||
I was
|
||||
y the
|
||||
his
|
||||
appe
|
||||
con
|
||||
ho
|
||||
hat's
|
||||
Threed
|
||||
get
|
||||
s of
|
||||
inter
|
||||
talk
|
||||
man
|
||||
day
|
||||
ove
|
||||
ha ha
|
||||
inally
|
||||
monkey
|
||||
s and
|
||||
ate
|
||||
see
|
||||
town
|
||||
side
|
||||
y to
|
||||
ever
|
||||
equip
|
||||
than
|
||||
who
|
||||
long
|
||||
care
|
||||
room
|
||||
e are
|
||||
ard
|
||||
end
|
||||
, you
|
||||
the b
|
||||
I know
|
||||
think
|
||||
s you
|
||||
time
|
||||
ment
|
||||
so
|
||||
!
|
||||
I've
|
||||
ell
|
||||
wa
|
||||
ious
|
||||
reat
|
||||
live
|
||||
ange
|
||||
we
|
||||
ble
|
||||
@.....
|
||||
ecover
|
||||
only
|
||||
thing
|
||||
er...
|
||||
Mr.
|
||||
ough
|
||||
now
|
||||
I
|
||||
wor
|
||||
to
|
||||
ed.
|
||||
I
|
||||
're
|
||||
give
|
||||
ing a
|
||||
return
|
||||
better
|
||||
ince
|
||||
well
|
||||
one
|
||||
still
|
||||
ying
|
||||
me...
|
||||
sta
|
||||
ust
|
||||
per
|
||||
lease
|
||||
ling
|
||||
point
|
||||
ect
|
||||
ast
|
||||
pretty
|
||||
Giygas
|
||||
ecause
|
||||
member
|
||||
carry
|
||||
used
|
||||
elieve
|
||||
money
|
||||
pres
|
||||
way
|
||||
di
|
||||
even
|
||||
ound
|
||||
s to
|
||||
ting
|
||||
ted
|
||||
oing
|
||||
and
|
||||
ine
|
||||
T
|
||||
sure
|
||||
on
|
||||
@...I
|
||||
while
|
||||
@but
|
||||
@We
|
||||
ice
|
||||
se
|
||||
ive
|
||||
rea
|
||||
com
|
||||
est
|
||||
have
|
||||
but
|
||||
away
|
||||
here
|
||||
must
|
||||
but
|
||||
want
|
||||
ready
|
||||
I'm
|
||||
carr
|
||||
my
|
||||
ay...
|
||||
are
|
||||
@Hey,
|
||||
world
|
||||
ing a
|
||||
happ
|
||||
seem
|
||||
his
|
||||
nder
|
||||
se
|
||||
ant
|
||||
item
|
||||
@But
|
||||
sho
|
||||
in a
|
||||
made
|
||||
night
|
||||
et's
|
||||
like
|
||||
The
|
||||
che
|
||||
de
|
||||
ful
|
||||
hat
|
||||
and
|
||||
self
|
||||
ould
|
||||
@No
|
||||
car
|
||||
tr
|
||||
good
|
||||
stor
|
||||
ombie
|
||||
@Oh
|
||||
@It
|
||||
s a
|
||||
vent
|
||||
ant
|
||||
so
|
||||
olla
|
||||
ree
|
||||
Your
|
||||
make
|
||||
work
|
||||
power
|
||||
home
|
||||
also
|
||||
ance
|
||||
@How
|
||||
h...
|
||||
@If
|
||||
ple
|
||||
buy
|
||||
e,
|
||||
n't
|
||||
oke
|
||||
n't
|
||||
more
|
||||
Good
|
||||
t a
|
||||
all
|
||||
take
|
||||
round
|
||||
when
|
||||
name
|
||||
being
|
||||
attle
|
||||
ite
|
||||
ack
|
||||
y...
|
||||
@Whe
|
||||
with
|
||||
al
|
||||
have
|
||||
look
|
||||
t of
|
||||
aster
|
||||
a lo
|
||||
feel
|
||||
here
|
||||
count
|
||||
monst
|
||||
now
|
||||
ark
|
||||
ous
|
||||
'll
|
||||
bus
|
||||
head
|
||||
any
|
||||
t you
|
||||
erson
|
||||
after
|
||||
ummer
|
||||
hard
|
||||
ful
|
||||
ever
|
||||
kid
|
||||
a b
|
||||
kay
|
||||
tra
|
||||
pla
|
||||
ook
|
||||
ome
|
||||
eat
|
||||
@Wel
|
||||
off
|
||||
turn
|
||||
I am
|
||||
oney
|
||||
any
|
||||
ave
|
||||
any
|
||||
enem
|
||||
con
|
||||
me
|
||||
red
|
||||
en
|
||||
bo
|
||||
re
|
||||
ell
|
||||
sell
|
||||
what
|
||||
next
|
||||
ure
|
||||
bu
|
||||
pro
|
||||
on
|
||||
res
|
||||
es
|
||||
lo
|
||||
our
|
||||
use
|
||||
iste
|
||||
ood
|
||||
no
|
||||
ope
|
||||
ock
|
||||
row
|
||||
@He
|
||||
how
|
||||
may
|
||||
as
|
||||
stor
|
||||
are
|
||||
ost
|
||||
mean
|
||||
We
|
||||
He
|
||||
@An
|
||||
it
|
||||
in
|
||||
ound
|
||||
one.
|
||||
come
|
||||
blue
|
||||
way,
|
||||
or
|
||||
mo
|
||||
.
|
||||
each
|
||||
some
|
||||
@(Th
|
||||
otel
|
||||
hand
|
||||
came
|
||||
ca
|
||||
ame
|
||||
@Hey
|
||||
een
|
||||
spec
|
||||
red
|
||||
ing!
|
||||
...
|
||||
hose
|
||||
ind
|
||||
ice
|
||||
ver
|
||||
W
|
||||
min
|
||||
et
|
||||
on
|
||||
ace
|
||||
er.
|
||||
are
|
||||
nter
|
||||
o...
|
||||
were
|
||||
help
|
||||
old
|
||||
it.
|
||||
hear
|
||||
stop
|
||||
look
|
||||
com
|
||||
@Do
|
||||
her
|
||||
pro
|
||||
chin
|
||||
ble
|
||||
e a
|
||||
girl
|
||||
luck
|
||||
B
|
||||
act
|
||||
ike
|
||||
down
|
||||
part
|
||||
see
|
||||
use
|
||||
uch
|
||||
from
|
||||
just
|
||||
llow
|
||||
@Her
|
||||
at
|
||||
@So,
|
||||
ye
|
||||
ser
|
||||
ying
|
||||
ring
|
||||
eave
|
||||
big
|
||||
ried
|
||||
was
|
||||
say
|
||||
su
|
||||
her
|
||||
it.
|
||||
Man
|
||||
kin
|
||||
up
|
||||
ers
|
||||
@Why
|
||||
p...
|
||||
cour
|
||||
him
|
||||
agic
|
||||
any
|
||||
fin
|
||||
eal
|
||||
he
|
||||
ide
|
||||
oor
|
||||
ity
|
||||
got
|
||||
ens
|
||||
ish
|
||||
ive
|
||||
sa
|
||||
oon
|
||||
fee
|
||||
s a
|
||||
nce
|
||||
D
|
||||
uck
|
||||
ass
|
||||
man
|
||||
a p
|
||||
@(I
|
||||
@Wh
|
||||
gu
|
||||
(
|
||||
bus
|
||||
los
|
||||
ts
|
||||
ba
|
||||
S
|
||||
if
|
||||
@Ha
|
||||
ma
|
||||
unn
|
||||
ay
|
||||
ner
|
||||
@A
|
||||
or
|
||||
stu
|
||||
ust
|
||||
kya
|
||||
shi
|
||||
pos
|
||||
A
|
||||
int
|
||||
le
|
||||
ary
|
||||
ven
|
||||
ch
|
||||
own
|
||||
hu
|
||||
@My
|
||||
@So
|
||||
sp
|
||||
sh
|
||||
wan
|
||||
ool
|
||||
Y
|
||||
old
|
||||
eas
|
||||
, I
|
||||
iki
|
||||
@Ky
|
||||
@Ye
|
||||
spi
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,233 @@
|
|||
{
|
||||
"0": "ぁ",
|
||||
"1": "あ",
|
||||
"2": "ぃ",
|
||||
"3": "い",
|
||||
"4": "ぅ",
|
||||
"5": "う",
|
||||
"6": "ぇ",
|
||||
"7": "え",
|
||||
"8": "ぉ",
|
||||
"9": "お",
|
||||
"10": "か",
|
||||
"11": "が",
|
||||
"12": "き",
|
||||
"13": "ぎ",
|
||||
"14": "く",
|
||||
"15": "ぐ",
|
||||
"16": "け",
|
||||
"17": "げ",
|
||||
"18": "こ",
|
||||
"19": "ご",
|
||||
"20": "さ",
|
||||
"21": "ざ",
|
||||
"22": "し",
|
||||
"23": "じ",
|
||||
"24": "す",
|
||||
"25": "ず",
|
||||
"26": "せ",
|
||||
"27": "ぜ",
|
||||
"28": "そ",
|
||||
"29": "ぞ",
|
||||
"30": "た",
|
||||
"31": "だ",
|
||||
"32": "ち",
|
||||
"33": "ぢ",
|
||||
"34": "っ",
|
||||
"35": "つ",
|
||||
"36": "づ",
|
||||
"37": "て",
|
||||
"38": "で",
|
||||
"39": "と",
|
||||
"40": "ど",
|
||||
"41": "な",
|
||||
"42": "に",
|
||||
"43": "ぬ",
|
||||
"44": "ね",
|
||||
"45": "の",
|
||||
"46": "は",
|
||||
"47": "ば",
|
||||
"48": "ぱ",
|
||||
"49": "ひ",
|
||||
"50": "び",
|
||||
"51": "ぴ",
|
||||
"52": "ふ",
|
||||
"53": "ぶ",
|
||||
"54": "ぷ",
|
||||
"55": "へ",
|
||||
"56": "べ",
|
||||
"57": "ぺ",
|
||||
"58": "ほ",
|
||||
"59": "ぼ",
|
||||
"60": "ぽ",
|
||||
"61": "ま",
|
||||
"62": "み",
|
||||
"63": "む",
|
||||
"64": "め",
|
||||
"65": "も",
|
||||
"66": "ゃ",
|
||||
"67": "や",
|
||||
"68": "ゅ",
|
||||
"69": "ゆ",
|
||||
"70": "ょ",
|
||||
"71": "よ",
|
||||
"72": "ら",
|
||||
"73": "り",
|
||||
"74": "る",
|
||||
"75": "れ",
|
||||
"76": "ろ",
|
||||
"77": " ",
|
||||
"78": "わ",
|
||||
"79": " ",
|
||||
"80": " ",
|
||||
"81": "を",
|
||||
"82": "ん",
|
||||
"93": "➨",
|
||||
"96": "ァ",
|
||||
"97": "ア",
|
||||
"98": "ィ",
|
||||
"99": "イ",
|
||||
"100": "ゥ",
|
||||
"101": "ウ",
|
||||
"102": "ェ",
|
||||
"103": "エ",
|
||||
"104": "ォ",
|
||||
"105": "オ",
|
||||
"106": "カ",
|
||||
"107": "ガ",
|
||||
"108": "キ",
|
||||
"109": "ギ",
|
||||
"110": "ク",
|
||||
"111": "グ",
|
||||
"112": "ケ",
|
||||
"113": "ゲ",
|
||||
"114": "コ",
|
||||
"115": "ゴ",
|
||||
"116": "サ",
|
||||
"117": "ザ",
|
||||
"118": "シ",
|
||||
"119": "ジ",
|
||||
"120": "ス",
|
||||
"121": "ズ",
|
||||
"122": "セ",
|
||||
"123": "ゼ",
|
||||
"124": "ソ",
|
||||
"125": "ゾ",
|
||||
"126": "タ",
|
||||
"127": "ダ",
|
||||
"128": "チ",
|
||||
"129": "ヂ",
|
||||
"130": "ッ",
|
||||
"131": "ツ",
|
||||
"132": "ヅ",
|
||||
"133": "テ",
|
||||
"134": "デ",
|
||||
"135": "ト",
|
||||
"136": "ド",
|
||||
"137": "ナ",
|
||||
"138": "ニ",
|
||||
"139": "ヌ",
|
||||
"140": "ネ",
|
||||
"141": "ノ",
|
||||
"142": "ハ",
|
||||
"143": "バ",
|
||||
"144": "パ",
|
||||
"145": "ヒ",
|
||||
"146": "ビ",
|
||||
"147": "ピ",
|
||||
"148": "フ",
|
||||
"149": "ブ",
|
||||
"150": "プ",
|
||||
"151": "ヘ",
|
||||
"152": "ベ",
|
||||
"153": "ペ",
|
||||
"154": "ホ",
|
||||
"155": "ボ",
|
||||
"156": "ポ",
|
||||
"157": "マ",
|
||||
"158": "ミ",
|
||||
"159": ".",
|
||||
"160": "ム",
|
||||
"161": "メ",
|
||||
"162": "モ",
|
||||
"163": "ャ",
|
||||
"164": "ヤ",
|
||||
"165": "ュ",
|
||||
"166": "ユ",
|
||||
"167": "ョ",
|
||||
"168": "ヨ",
|
||||
"169": "ラ",
|
||||
"170": "リ",
|
||||
"171": "ル",
|
||||
"172": "レ",
|
||||
"173": "ロ",
|
||||
"174": " ",
|
||||
"175": "ワ",
|
||||
"176": " ",
|
||||
"177": " ",
|
||||
"178": "ヲ",
|
||||
"179": "ン",
|
||||
"192": "A",
|
||||
"193": "B",
|
||||
"194": "C",
|
||||
"195": "D",
|
||||
"196": "E",
|
||||
"197": "F",
|
||||
"198": "G",
|
||||
"199": "H",
|
||||
"200": "I",
|
||||
"201": "J",
|
||||
"202": "K",
|
||||
"203": "L",
|
||||
"204": "M",
|
||||
"205": "N",
|
||||
"206": "O",
|
||||
"207": "P",
|
||||
"208": "Q",
|
||||
"209": "R",
|
||||
"210": "S",
|
||||
"211": "T",
|
||||
"212": "U",
|
||||
"213": "V",
|
||||
"214": "W",
|
||||
"215": "X",
|
||||
"216": "Y",
|
||||
"217": "Z",
|
||||
"218": "α",
|
||||
"219": "β",
|
||||
"220": "γ",
|
||||
"221": "Σ",
|
||||
"222": "Ω",
|
||||
"223": " ",
|
||||
"224": "0",
|
||||
"225": "1",
|
||||
"226": "2",
|
||||
"227": "3",
|
||||
"228": "4",
|
||||
"229": "5",
|
||||
"230": "6",
|
||||
"231": "7",
|
||||
"232": "8",
|
||||
"233": "9",
|
||||
"234": "#",
|
||||
"235": "!",
|
||||
"236": "?",
|
||||
"237": "/",
|
||||
"238": ":",
|
||||
"239": "-",
|
||||
"240": "~",
|
||||
"241": "・",
|
||||
"242": "¨",
|
||||
"243": "。",
|
||||
"244": "「",
|
||||
"245": "」",
|
||||
"246": "(",
|
||||
"247": ")",
|
||||
"248": "♪",
|
||||
"249": "◯",
|
||||
"250": "$",
|
||||
"251": "\"",
|
||||
"252": "°",
|
||||
"253": "◆",
|
||||
"254": "Ê"
|
||||
}
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -5,8 +5,4 @@
|
|||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
Loading…
Reference in New Issue