using Core; using System.Collections.Generic; using System; using System.IO; using FLCore; using UnityEngine; namespace Services { public class ResourcesCreater { /// /// Адрес до файла Resx (Resources C#) /// private string _pathResources; /// /// Адрес до файла TXT взятого из файла .rc для переработки в Resx ресурс /// private string _pathStringTableTxt; /// /// Адрес до папки с файлами TXT взятых из .rc для переработки в Resx ресурс /// private string _pathDirHTML; /// /// Логи успешной обработки ошибок /// private string _logOPath = "Log_Ok.txt"; /// /// Логи не успешной обработки ошибок /// private string _logNPath = "Log_Noup.txt"; public ResourcesCreater(string path) { _pathResources = path; } /// /// Создаёт таблицу String Table из txt (взятого с .rc) в .resx /// /// Адрес до файла TXT взятого из файла .rc для переработки в Resx ресурс /// this public ResourcesCreater CreateStringTableData(string path, bool extra = false) { _pathStringTableTxt = path; if (extra == false) GenerateStringTableEquipresources(); else ExtraGenerateStringTableEquipresources(); return this; } /// /// Дополняет в таблицу данные HTML из txt (взятого с папки с .rc) в .resx /// /// Адрес до папки с файлами TXT взятых из .rc для переработки в Resx ресурс /// this public ResourcesCreater CreateHTMLData(string dir) { _pathDirHTML = dir; GenerateHTMLIdsEquipResources(); return this; } /// /// Дополняет в таблицу данные HTML из txt (взятого с папки с .rc) в .resx /// /// Адрес до папки с файлами TXT взятых из .rc для переработки в Resx ресурс /// this 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 += "
" + 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 textFiles = new Dictionary(); 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", "
"); resourcers.AddResource(key, val.Trim()); } } }