FLResourceLibrary/FLGenerateLibrary/Services/ResourcesCreater.cs
Dvurechensky 6e2bfe062d 1.0.1
2025-05-13 15:25:37 +03:00

226 lines
8.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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());
}
}
}