226 lines
8.2 KiB
C#
226 lines
8.2 KiB
C#
/*
|
||
* Author: Nikolay Dvurechensky
|
||
* Site: https://www.dvurechensky.pro/
|
||
* Gmail: dvurechenskysoft@gmail.com
|
||
* Last Updated: 13 мая 2025 15:25:18
|
||
* Version: 1.0.1
|
||
*/
|
||
|
||
using Core;
|
||
using System.Collections.Generic;
|
||
using System;
|
||
using System.IO;
|
||
using FLCore;
|
||
using UnityEngine;
|
||
|
||
namespace Services
|
||
{
|
||
public class ResourcesCreater
|
||
{
|
||
/// <summary>
|
||
/// Адрес до файла Resx (Resources C#)
|
||
/// </summary>
|
||
private string _pathResources;
|
||
/// <summary>
|
||
/// Адрес до файла TXT взятого из файла .rc для переработки в Resx ресурс
|
||
/// </summary>
|
||
private string _pathStringTableTxt;
|
||
/// <summary>
|
||
/// Адрес до папки с файлами TXT взятых из .rc для переработки в Resx ресурс
|
||
/// </summary>
|
||
private string _pathDirHTML;
|
||
/// <summary>
|
||
/// Логи успешной обработки ошибок
|
||
/// </summary>
|
||
private string _logOPath = "Log_Ok.txt";
|
||
/// <summary>
|
||
/// Логи не успешной обработки ошибок
|
||
/// </summary>
|
||
private string _logNPath = "Log_Noup.txt";
|
||
|
||
public ResourcesCreater(string path)
|
||
{
|
||
_pathResources = path;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Создаёт таблицу String Table из txt (взятого с .rc) в .resx
|
||
/// </summary>
|
||
/// <param name="path">Адрес до файла TXT взятого из файла .rc для переработки в Resx ресурс</param>
|
||
/// <returns>this</returns>
|
||
public ResourcesCreater CreateStringTableData(string path, bool extra = false)
|
||
{
|
||
_pathStringTableTxt = path;
|
||
if (extra == false) GenerateStringTableEquipresources();
|
||
else ExtraGenerateStringTableEquipresources();
|
||
return this;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Дополняет в таблицу данные HTML из txt (взятого с папки с .rc) в .resx
|
||
/// </summary>
|
||
/// <param name="dir">Адрес до папки с файлами TXT взятых из .rc для переработки в Resx ресурс</param>
|
||
/// <returns>this</returns>
|
||
public ResourcesCreater CreateHTMLData(string dir)
|
||
{
|
||
_pathDirHTML = dir;
|
||
GenerateHTMLIdsEquipResources();
|
||
return this;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Дополняет в таблицу данные HTML из txt (взятого с папки с .rc) в .resx
|
||
/// </summary>
|
||
/// <param name="dir">Адрес до папки с файлами TXT взятых из .rc для переработки в Resx ресурс</param>
|
||
/// <returns>this</returns>
|
||
public ResourcesCreater ClearAllData()
|
||
{
|
||
ClearAllDataResource();
|
||
return this;
|
||
}
|
||
|
||
private void ExtraGenerateStringTableEquipresources()
|
||
{
|
||
Console.WriteLine("Extra start process");
|
||
if (!File.Exists(_pathStringTableTxt))
|
||
{
|
||
Console.WriteLine($"Файл: {_pathStringTableTxt} - не существует!");
|
||
return;
|
||
}
|
||
|
||
var lines = File.ReadAllLines(_pathStringTableTxt);
|
||
var res = new Resourcers(_pathResources);
|
||
var c = 0;
|
||
var count = 0;
|
||
var dataStr = string.Empty;
|
||
var keyStr = string.Empty;
|
||
foreach (var line in lines)
|
||
{
|
||
//Console.WriteLine(c);
|
||
//if (c >= 10) break;
|
||
if (string.IsNullOrEmpty(line) || line.IndexOf(" ") == -1)
|
||
{
|
||
continue;
|
||
}
|
||
else
|
||
{
|
||
//read key val
|
||
var key = line.Substring(0, line.IndexOf(" "));
|
||
bool parseKey = int.TryParse(key, out count);
|
||
if(parseKey == false)
|
||
{
|
||
dataStr += "<br>" + line;
|
||
continue;
|
||
}
|
||
else
|
||
{
|
||
bool p2 = int.TryParse(keyStr, out count);
|
||
if (p2 == true)
|
||
{
|
||
c++;
|
||
dataStr = dataStr.ReplaceNegativeSymphols("\"");
|
||
res.AddResource(keyStr, dataStr.Trim());
|
||
Console.WriteLine("[parseKey]" + keyStr + "|" + dataStr.Trim());
|
||
}
|
||
keyStr = key;
|
||
dataStr = (line.Substring(line.IndexOf(" ") + 1)).Trim();
|
||
}
|
||
}
|
||
}
|
||
res.AddResource(keyStr, dataStr.Trim());
|
||
|
||
res.Generate();
|
||
|
||
Console.WriteLine("");
|
||
Console.WriteLine($"-> Complete! names: {c}");
|
||
}
|
||
|
||
private void GenerateStringTableEquipresources()
|
||
{
|
||
var _isParse = false;
|
||
if (!File.Exists(_pathStringTableTxt))
|
||
{
|
||
Console.WriteLine($"Файл: {_pathStringTableTxt} - не существует!");
|
||
return;
|
||
}
|
||
var lines = File.ReadAllLines(_pathStringTableTxt);
|
||
var res = new Resourcers(_pathResources);
|
||
var count = 0;
|
||
foreach (var line in lines)
|
||
{
|
||
if (string.IsNullOrEmpty(line)) continue;
|
||
if (line.Contains("}")) _isParse = false;
|
||
if (_isParse)
|
||
{
|
||
count++;
|
||
ParseSring(line.Trim(), res);
|
||
}
|
||
if (line.Contains("{"))
|
||
_isParse = true;
|
||
}
|
||
res.Generate();
|
||
|
||
Console.WriteLine("");
|
||
Console.WriteLine($"-> Complete! names: {count}");
|
||
}
|
||
|
||
private void GenerateLog()
|
||
{
|
||
if (File.Exists(_logOPath))
|
||
File.Create(_logOPath).Close();
|
||
if (File.Exists(_logNPath))
|
||
File.Create(_logNPath).Close();
|
||
File.WriteAllText(_logOPath, "");
|
||
File.WriteAllText(_logNPath, "");
|
||
}
|
||
|
||
private void GenerateHTMLIdsEquipResources()
|
||
{
|
||
if (!Directory.Exists(_pathDirHTML))
|
||
{
|
||
Console.WriteLine($"Папка: {_pathDirHTML} - не существует!");
|
||
return;
|
||
}
|
||
|
||
string[] files = Directory.GetFiles(_pathDirHTML);
|
||
Dictionary<int, string> textFiles = new Dictionary<int, string>();
|
||
var res = new Resourcers(_pathResources);
|
||
GenerateLog();
|
||
foreach (var file in files)
|
||
{
|
||
if (file == "SBM\\HTML\\Log_Noup.txt" || file == "SBM\\HTML\\Log_Ok.txt") continue;
|
||
|
||
var name = file.Substring(file.LastIndexOf("L") + 1, file.IndexOf("_") - file.LastIndexOf("L") - 1);
|
||
var nameId = int.Parse(name);
|
||
if (!textFiles.ContainsKey(nameId))
|
||
{
|
||
var text = new XMLtoUnityFormatConverter().ReadXmlData(File.ReadAllText(file, encoding: System.Text.Encoding.GetEncoding("UTF-16")), file);
|
||
res.AddResource(nameId.ToString(), text[0]);
|
||
textFiles.Add(nameId, File.ReadAllText(file));
|
||
}
|
||
}
|
||
|
||
Console.WriteLine("");
|
||
Console.WriteLine($"-> Complete! HTML: {files.Length}");
|
||
res.Generate();
|
||
}
|
||
|
||
private void ClearAllDataResource()
|
||
{
|
||
var res = new Resourcers(_pathResources);
|
||
res.RemoveAllResources();
|
||
}
|
||
|
||
private void ParseSring(string value, Resourcers resourcers)
|
||
{
|
||
var key = value.Substring(0, value.IndexOf(","));
|
||
var val = (value.Substring(value.IndexOf(",") + 1)).Trim();
|
||
val = val.ReplaceNegativeSymphols("\\\"");
|
||
val = val.Replace("\"", "");
|
||
if(val.Contains("\\n"))
|
||
val = val.Replace("\\n", "<br>");
|
||
resourcers.AddResource(key, val.Trim());
|
||
}
|
||
}
|
||
}
|