From a71f01391ca8f1d7cb56ce59c009600bb3bd5e01 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Wed, 14 Jan 2026 17:28:43 +0100 Subject: [PATCH] Move Java format code to JavaConstants.cs --- PCK-Studio/Controls/JavaImportForm.cs | 34 +---------- PckStudio.Core/IO/Java/JavaConstants.cs | 81 ++++++++++++++++++++++++- 2 files changed, 81 insertions(+), 34 deletions(-) diff --git a/PCK-Studio/Controls/JavaImportForm.cs b/PCK-Studio/Controls/JavaImportForm.cs index 00a1ce60..16e56f63 100644 --- a/PCK-Studio/Controls/JavaImportForm.cs +++ b/PCK-Studio/Controls/JavaImportForm.cs @@ -17,36 +17,6 @@ namespace PckStudio.Controls { public partial class JavaImportForm : ImmersiveForm { - static Dictionary _javaColorCodeToColor = new Dictionary() - { - ["§0"] = new RichTextBoxColor(Color.FromArgb(0x00, 0x00, 0x00), Color.FromArgb(18, 18, 18)), - ["§1"] = new RichTextBoxColor(Color.FromArgb(0x00, 0x00, 0xAA), Color.FromArgb(0x00, 0x00, 0x2A)), - ["§2"] = new RichTextBoxColor(Color.FromArgb(0x00, 0xAA, 0x00), Color.FromArgb(0x00, 0x2A, 0x00)), - ["§3"] = new RichTextBoxColor(Color.FromArgb(0x00, 0xAA, 0xAA), Color.FromArgb(0x00, 0x2A, 0x2A)), - ["§4"] = new RichTextBoxColor(Color.FromArgb(0xAA, 0x00, 0x00), Color.FromArgb(0x2A, 0x00, 0x00)), - ["§5"] = new RichTextBoxColor(Color.FromArgb(0xAA, 0x00, 0xAA), Color.FromArgb(0x2A, 0x00, 0x2A)), - ["§6"] = new RichTextBoxColor(Color.FromArgb(0xFF, 0xAA, 0x00), Color.FromArgb(0x2A, 0x2A, 0x00)), - ["§7"] = new RichTextBoxColor(Color.FromArgb(0xAA, 0xAA, 0xAA), Color.FromArgb(0x2A, 0x2A, 0x2A)), - ["§8"] = new RichTextBoxColor(Color.FromArgb(0x55, 0x55, 0x55), Color.FromArgb(0x15, 0x15, 0x15)), - ["§9"] = new RichTextBoxColor(Color.FromArgb(0x55, 0x55, 0xFF), Color.FromArgb(0x15, 0x15, 0x3F)), - ["§a"] = new RichTextBoxColor(Color.FromArgb(0x55, 0xFF, 0x55), Color.FromArgb(0x15, 0x3F, 0x15)), - ["§b"] = new RichTextBoxColor(Color.FromArgb(0x55, 0xFF, 0xFF), Color.FromArgb(0x15, 0x3F, 0x3F)), - ["§c"] = new RichTextBoxColor(Color.FromArgb(0xFF, 0x55, 0x55), Color.FromArgb(0x3F, 0x15, 0x15)), - ["§d"] = new RichTextBoxColor(Color.FromArgb(0xFF, 0x55, 0xFF), Color.FromArgb(0x3F, 0x15, 0x3F)), - ["§e"] = new RichTextBoxColor(Color.FromArgb(0xFF, 0xFF, 0x55), Color.FromArgb(0x3F, 0x3F, 0x15)), - ["§f"] = new RichTextBoxColor(Color.FromArgb(0xFF, 0xFF, 0xFF), Color.FromArgb(0x3F, 0x3F, 0x3F)), - ["§g"] = new RichTextBoxColor(Color.FromArgb(0xDD, 0xD6, 0x05), Color.FromArgb(0x37, 0x35, 0x01)), - ["§h"] = new RichTextBoxColor(Color.FromArgb(0xE3, 0xD4, 0xD1), Color.FromArgb(0x38, 0x35, 0x34)), - ["§i"] = new RichTextBoxColor(Color.FromArgb(0xCE, 0xCA, 0xCA), Color.FromArgb(0x33, 0x32, 0x32)), - ["§j"] = new RichTextBoxColor(Color.FromArgb(0x44, 0x3A, 0x3B), Color.FromArgb(0x11, 0x0E, 0x0E)), - ["§m"] = new RichTextBoxColor(Color.FromArgb(0x97, 0x16, 0x07), Color.FromArgb(0x25, 0x05, 0x01)), - ["§n"] = new RichTextBoxColor(Color.FromArgb(0xB4, 0x68, 0x4D), Color.FromArgb(0x2D, 0x1A, 0x13)), - ["§p"] = new RichTextBoxColor(Color.FromArgb(0xDE, 0xB1, 0x2D), Color.FromArgb(0x37, 0x2C, 0x0B)), - ["§q"] = new RichTextBoxColor(Color.FromArgb(0x47, 0xA0, 0x36), Color.FromArgb(0x04, 0x28, 0x0D)), - ["§s"] = new RichTextBoxColor(Color.FromArgb(0x2C, 0xBA, 0xA8), Color.FromArgb(0x0B, 0x2E, 0x2A)), - ["§t"] = new RichTextBoxColor(Color.FromArgb(0x21, 0x49, 0x7B), Color.FromArgb(0x08, 0x12, 0x1E)), - ["§u"] = new RichTextBoxColor(Color.FromArgb(0x9A, 0x5C, 0xC6), Color.FromArgb(0x26, 0x17, 0x31)), - }; private ResourcePackImporter _importer; private readonly DLCManager _dlcManager; private readonly ImportStatusReport _importStatusReport; @@ -193,9 +163,9 @@ namespace PckStudio.Controls break; default: richTextBox1.SelectionFont = new Font(richTextBox1.Font, fontStyle); - if (_javaColorCodeToColor.TryGetValue(textSection.Key, out RichTextBoxColor textColor)) + if (JavaConstants.JavaColorCodeToColor.TryGetValue(textSection.Key, out (Color foreground, Color background) textColor)) { - richTextBox1.AppendText(textSection.Value, textColor); + richTextBox1.AppendText(textSection.Value, new RichTextBoxColor(textColor.foreground, textColor.background)); break; } Debug.WriteLine(textSection); diff --git a/PckStudio.Core/IO/Java/JavaConstants.cs b/PckStudio.Core/IO/Java/JavaConstants.cs index 0b7bd4b0..5326b582 100644 --- a/PckStudio.Core/IO/Java/JavaConstants.cs +++ b/PckStudio.Core/IO/Java/JavaConstants.cs @@ -4,12 +4,12 @@ using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; +using PckStudio.Core.Extensions; namespace PckStudio.Core.IO.Java { - internal class JavaConstants + public class JavaConstants { - public static Dictionary JavaColorCodeToColor { get; } = new Dictionary() { ["§0"] = (Color.FromArgb(0x00, 0x00, 0x00), Color.FromArgb(18, 18, 18)), @@ -46,5 +46,82 @@ namespace PckStudio.Core.IO.Java public static readonly Color LilyPad = Color.FromArgb(unchecked((int)0xFF_208030)); public static readonly Color AttachedMelonStem = Color.FromArgb(unchecked((int)0xFF_E0C71C)); public static readonly Color AttachedPumpkinStem = Color.FromArgb(unchecked((int)0xFF_E0C71C)); + + public static string EsapceMiencarftJavaFormat(string text) + => text.Split(['§'], StringSplitOptions.RemoveEmptyEntries).ToString(""); + + + public struct HTMLString(string value) + { + private string value = value; + + private List _front = new(); + private List _back = new(); + + public void AddTag(string tagName, params string[] parameters) + { + string param = string.Join(" ", parameters); + _front.Add($"<{new string[] { tagName, param }.ToString(" ")}>"); + _back.Insert(0, $""); + } + + public override string ToString() + { + return string.Join("", _front) + value + string.Join("", _back); + } + } + + public static string ConvertJavaTextFormatToHTML(string text) + { + string[] sections = text.Split(['§'], StringSplitOptions.RemoveEmptyEntries); + if (sections.Length == 0) + return text; + Color textColor = Color.White; + string formatText = string.Join("", sections + .Select(s => + { + if (string.IsNullOrWhiteSpace(s)) + return ""; + string colorFormat = "§" + s[0]; + if (JavaColorCodeToColor.TryGetValue(colorFormat, out (Color foreground, Color background) color)) + { + textColor = color.foreground; + } + + if (s.Length == 1) + return ""; + + string colorText = s.Substring(1); + bool hasNewLineAtEnd = colorText.EndsWith("\n"); + string text = hasNewLineAtEnd ? colorText.Substring(0, colorText.Length - 1) : colorText; + string cr = hasNewLineAtEnd ? "\n" : ""; + HTMLString htmlString = new HTMLString(colorText); + if (colorFormat == "§r") + { + textColor = Color.White; + } + if (textColor != Color.White) + { + string htmlForegroundColor = textColor.ToHTMLColor(); + htmlString.AddTag("font", $"color=\"{htmlForegroundColor}\""); + } + // italic + if (colorFormat == "§o") + htmlString.AddTag("i"); + // bold + if (colorFormat == "§l") + htmlString.AddTag("b"); + // strikethrough + if (colorFormat == "§m") + htmlString.AddTag("s"); + // underline + if (colorFormat == "§n") + htmlString.AddTag("u"); + + return $"{htmlString}{cr}"; + } + )); + return formatText; + } } }