JD2022-TU1/main/tools/apps/TeaBox/Script/Data/JDJapMacros.cs

185 lines
No EOL
6.8 KiB
C#

using TeaBox.Macros;
using System.Diagnostics;
using System.IO;
using System.ComponentModel;
using System.Linq;
using System.Collections.Generic;
using System;
using System.Data.OleDb;
using System.Text;
using System.Data;
[Module(Icon = "japan")]
[Category("Data")]
[DisplayName("Japan")]
public static class JDJapMacros
{
[Macro(ThreadAffinity.ExecuteAsync, Icon = "japan")]
[Description(@"1. Reads all texts from Songdescs and Oasis japanese xls column from X:\JD_DATA\jp\
2. outputs the list of characters in X:\JD_DATA\jp\data\World\JD5\_UI\UI_FONTS\texts_all.txt
3. Runs FontGenerator for REGULAR and FAT fonts.")]
[DisplayName(@"List characters and generate REGULAR and FAT fonts (for base_set, Oasis and songdescs texts).")]
public static void GetAllUniqueJapaneseCharactersFromData(IExecutionContext context)
{
HashSet<Char> uniqueCharacters = new HashSet<char>();
foreach (var file in System.IO.Directory.GetFiles(@"X:\JD_DATA\jp\data\World\JD5\", "*", SearchOption.AllDirectories))
{
if (file.EndsWith("SongDesc.tpl"))
{
foreach (var character in System.IO.File.ReadAllText(file))
{
uniqueCharacters.Add(character);
}
}
}
var baseCharacters = System.IO.File.ReadAllText(@"X:\JD_DATA\jp\data\World\JD5\_UI\UI_FONTS\texts_base_set.txt");
foreach (var character in baseCharacters)
{
uniqueCharacters.Add(character);
}
// Oasis xlsm export
foreach (var character in FromExcelFile(@"X:\JD_DATA\jp\data\EngineData\Localisation\JDyokai_Global_Loc.xlsm", "Menus", "AR"))
{
uniqueCharacters.Add(character);
}
var asString = string.Join("", uniqueCharacters.OrderBy(x => x));
System.IO.File.WriteAllText(@"X:\JD_DATA\jp\data\World\JD5\_UI\UI_FONTS\texts_all.txt", asString, Encoding.Unicode);
ExportFonts(new []{ "Font_Regular", "Font_Fat"});
}
[Macro(ThreadAffinity.ExecuteAsync, Icon = "japan")]
[Description(@"1. Reads lyrics texts in X:\JD_DATA\jp\
2. outputs the list of characters in X:\JD_DATA\jp\data\World\JD5\_UI\UI_FONTS\texts_nintendo.txt
3. Runs FontGenerator for NINTENDO font.")]
[DisplayName(@"List characters and generate NINTENDO font (for lyrics and credits texts).")]
public static void GetAllUniqueNintendoCharactersFromData(IExecutionContext context)
{
HashSet<Char> uniqueCharacters = new HashSet<char>();
foreach (var file in System.IO.Directory.GetFiles(@"X:\JD_DATA\jp\data\World\JD5\", "*", SearchOption.AllDirectories))
{
if (file.EndsWith("ktape") || file.EndsWith("timeline.tpl"))
{
foreach (var character in System.IO.File.ReadAllText(file))
{
uniqueCharacters.Add(character);
}
}
}
var credits = System.IO.File.ReadAllText(@"X:\JD_DATA\jp\data\World\JD5\_UI\UI_MENU\UI_MENU_PAG_Credits\Actors\CreditsComponent.act");
foreach (var character in credits)
{
uniqueCharacters.Add(character);
}
var asString = string.Join("", uniqueCharacters.OrderBy(x => x));
System.IO.File.WriteAllText(@"X:\JD_DATA\jp\data\World\JD5\_UI\UI_FONTS\texts_nintendo.txt", asString, Encoding.Unicode);
ExportFonts(new[] { "Font_Nintendo" });
}
/// <summary>
/// Returns the data of the specified worksheet as a CsvData structure.
/// </summary>
public static string FromExcelFile(string filePath, string worksheetName, string columnName)
{
if (!System.IO.File.Exists(filePath)) throw new FileNotFoundException(filePath);
// Worksheets end with $ in excel
worksheetName += "$";
var dataTable = new System.Data.DataTable();
var connectionString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=NO\";", filePath);
using (var connection = new OleDbConnection(connectionString))
{
connection.Open();
ValidateWorksheetExists(connection, filePath, worksheetName);
string sql = String.Format("select * from [{0}]", worksheetName);
var dataAdapter = new OleDbDataAdapter(sql, connection);
dataAdapter.Fill(dataTable);
}
StringBuilder result = new StringBuilder();
foreach (DataRow row in dataTable.Rows)
{
const int japneseColumn = 43;
result.Append(Convert.ToString(row[japneseColumn]));
}
return result.ToString();
}
private static void ValidateWorksheetExists(OleDbConnection connection, string filePath, string worksheetName)
{
var schemaTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
var availableColumns = schemaTable.Rows.OfType<DataRow>().Select(row => row["table_name"]).ToArray();
if (!availableColumns.Contains(worksheetName))
{
throw new Exception(string.Format("Cannot find worksheet {0} in excel {1}, found only '{2}'",
worksheetName, Path.GetFileName(filePath), string.Join(", ", availableColumns)));
}
}
private static void ExportFonts(String[] fonts)
{
foreach(var font in fonts)
{
var textFile = (font != "Font_Nintendo") ? "texts_all" : "texts_nintendo";
var process = new Process
{
StartInfo =
{
FileName = @"X:\JD_DATA\jp\engine\UA_BinExternal\FontGenerator\bmfont.exe",
Arguments = "-c " + @"X:\JD_DATA\jp\data\World\JD5\_UI\UI_FONTS\" + font + ".bmfc"
+ " -o " + @"X:\JD_DATA\jp\data\World\JD5\_UI\UI_FONTS\UI_" + font + ".fnt"
+ " -t " + @"X:\JD_DATA\jp\data\World\JD5\_UI\UI_FONTS\" + textFile + ".txt",
UseShellExecute = false,
RedirectStandardError = true,
CreateNoWindow = true
}
};
process.Start();
process.WaitForExit();
ConvertFont(font);
}
}
private static void ConvertFont(String font)
{
var process = new Process
{
StartInfo =
{
FileName = @"X:\JD_DATA\main\engine\Tools\UA_FontFormatConvertor\UA_FontFormatConvertor.exe",
Arguments = "silenceMode -i " + @"X:\JD_DATA\jp\data\World\JD5\_UI\UI_FONTS\UI_" + font + ".fnt"
+ " -o " + @"X:\JD_DATA\jp\data\World\JD5\_UI\UI_FONTS\UI_" + font + ".tfn",
}
};
process.Start();
process.WaitForExit();
}
}