185 lines
No EOL
6.8 KiB
C#
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();
|
|
}
|
|
} |