fix: Fixes infinite loop in gump builders (#1772)
### Summary - Fixes infinite loop in gump builders - Removes allocations for centering/coloring html in builders
This commit is contained in:
parent
622250b8f4
commit
d6c87a4da4
4 changed files with 64 additions and 18 deletions
|
|
@ -111,7 +111,11 @@ public ref struct DynamicGumpBuilder
|
||||||
ReadOnlySpan<char> text,
|
ReadOnlySpan<char> text,
|
||||||
bool background = false,
|
bool background = false,
|
||||||
bool scrollbar = false
|
bool scrollbar = false
|
||||||
) => AddHtml(x, y, width, height, color, $"<BASEFONT COLOR=#{color:X6}>{text}</BASEFONT>", background, scrollbar);
|
)
|
||||||
|
{
|
||||||
|
var handler = text.Color(color);
|
||||||
|
AddHtml(x, y, width, height, ref handler, background, scrollbar);
|
||||||
|
}
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public void AddHtml(
|
public void AddHtml(
|
||||||
|
|
@ -132,7 +136,11 @@ public ref struct DynamicGumpBuilder
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public void AddHtmlCentered(
|
public void AddHtmlCentered(
|
||||||
int x, int y, int width, int height, ReadOnlySpan<char> text, bool background = false, bool scrollbar = false
|
int x, int y, int width, int height, ReadOnlySpan<char> text, bool background = false, bool scrollbar = false
|
||||||
) => AddHtml(x, y, width, height, $"<CENTER>{text}</CENTER>", background, scrollbar);
|
)
|
||||||
|
{
|
||||||
|
var handler = text.Center();
|
||||||
|
AddHtml(x, y, width, height, ref handler, background, scrollbar);
|
||||||
|
}
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public void AddHtmlCentered(
|
public void AddHtmlCentered(
|
||||||
|
|
@ -145,7 +153,7 @@ public ref struct DynamicGumpBuilder
|
||||||
bool scrollbar = false
|
bool scrollbar = false
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
AddHtml(x, y, width, height, $"<CENTER>{handler.Text}</CENTER>", background, scrollbar);
|
AddHtmlCentered(x, y, width, height, handler.Text, background, scrollbar);
|
||||||
handler.Clear();
|
handler.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -159,7 +167,11 @@ public ref struct DynamicGumpBuilder
|
||||||
ReadOnlySpan<char> text,
|
ReadOnlySpan<char> text,
|
||||||
bool background = false,
|
bool background = false,
|
||||||
bool scrollbar = false
|
bool scrollbar = false
|
||||||
) => AddHtml(x, y, width, height, color, $"<CENTER>{text}</CENTER>", background, scrollbar);
|
)
|
||||||
|
{
|
||||||
|
var handler = text.Center(color);
|
||||||
|
AddHtml(x, y, width, height, ref handler, background, scrollbar);
|
||||||
|
}
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public void AddHtmlCentered(
|
public void AddHtmlCentered(
|
||||||
|
|
|
||||||
|
|
@ -154,7 +154,11 @@ public ref struct StaticGumpBuilder
|
||||||
ReadOnlySpan<char> text,
|
ReadOnlySpan<char> text,
|
||||||
bool background = false,
|
bool background = false,
|
||||||
bool scrollbar = false
|
bool scrollbar = false
|
||||||
) => AddHtml(x, y, width, height, color, $"<BASEFONT COLOR=#{color:X6}>{text}</BASEFONT>", background, scrollbar);
|
)
|
||||||
|
{
|
||||||
|
var handler = text.Color(color);
|
||||||
|
AddHtml(x, y, width, height, ref handler, background, scrollbar);
|
||||||
|
}
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public void AddHtml(
|
public void AddHtml(
|
||||||
|
|
@ -175,7 +179,11 @@ public ref struct StaticGumpBuilder
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public void AddHtmlCentered(
|
public void AddHtmlCentered(
|
||||||
int x, int y, int width, int height, ReadOnlySpan<char> text, bool background = false, bool scrollbar = false
|
int x, int y, int width, int height, ReadOnlySpan<char> text, bool background = false, bool scrollbar = false
|
||||||
) => AddHtml(x, y, width, height, $"<CENTER>{text}</CENTER>", background, scrollbar);
|
)
|
||||||
|
{
|
||||||
|
var handler = text.Center();
|
||||||
|
AddHtml(x, y, width, height, ref handler, background, scrollbar);
|
||||||
|
}
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public void AddHtmlCentered(
|
public void AddHtmlCentered(
|
||||||
|
|
@ -188,7 +196,8 @@ public ref struct StaticGumpBuilder
|
||||||
bool scrollbar = false
|
bool scrollbar = false
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
AddHtml(x, y, width, height, $"<CENTER>{handler.Text}</CENTER>", background, scrollbar);
|
var centerHandler = handler.Text.Center();
|
||||||
|
AddHtml(x, y, width, height, ref centerHandler, background, scrollbar);
|
||||||
handler.Clear();
|
handler.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -202,7 +211,11 @@ public ref struct StaticGumpBuilder
|
||||||
ReadOnlySpan<char> text,
|
ReadOnlySpan<char> text,
|
||||||
bool background = false,
|
bool background = false,
|
||||||
bool scrollbar = false
|
bool scrollbar = false
|
||||||
) => AddHtml(x, y, width, height, color, $"<CENTER>{text}</CENTER>", background, scrollbar);
|
)
|
||||||
|
{
|
||||||
|
var handler = text.Center(color);
|
||||||
|
AddHtml(x, y, width, height, ref handler, background, scrollbar);
|
||||||
|
}
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public void AddHtmlCentered(
|
public void AddHtmlCentered(
|
||||||
|
|
|
||||||
|
|
@ -166,7 +166,7 @@ public class GenericEntityPersistence<T> : Persistence, IGenericEntityPersistenc
|
||||||
if (entityEntry == entity)
|
if (entityEntry == entity)
|
||||||
{
|
{
|
||||||
logger.Error(
|
logger.Error(
|
||||||
$"Attempted to add '{{Entity}}' ({{Serial}}) to World.Items but it already exists in the collection.{Environment.NewLine}{{StackTrace}}",
|
$"Attempted to add '{{Entity}}' ({{Serial}}) but it already exists in the collection.{Environment.NewLine}{{StackTrace}}",
|
||||||
entity.GetType().FullName,
|
entity.GetType().FullName,
|
||||||
entity.Serial,
|
entity.Serial,
|
||||||
new StackTrace()
|
new StackTrace()
|
||||||
|
|
@ -175,7 +175,7 @@ public class GenericEntityPersistence<T> : Persistence, IGenericEntityPersistenc
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
logger.Error(
|
logger.Error(
|
||||||
$"Attempted to add '{{Entity}}' ({{Serial}}) to World.Items but found '{{ExistingEntity}}' ({{ExistingSerial}}).{Environment.NewLine}{{StackTrace}}",
|
$"Attempted to add '{{Entity}}' ({{Serial}}) but found '{{ExistingEntity}}' ({{ExistingSerial}}).{Environment.NewLine}{{StackTrace}}",
|
||||||
entity.GetType().FullName,
|
entity.GetType().FullName,
|
||||||
entity.Serial,
|
entity.Serial,
|
||||||
entityEntry.GetType().FullName,
|
entityEntry.GetType().FullName,
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,10 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using Server.Buffers;
|
||||||
|
|
||||||
namespace Server;
|
namespace Server;
|
||||||
|
|
||||||
|
|
@ -23,6 +25,10 @@ public static class Html
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static string Color(this string text, int color) => $"<BASEFONT COLOR=#{color:X6}>{text}</BASEFONT>";
|
public static string Color(this string text, int color) => $"<BASEFONT COLOR=#{color:X6}>{text}</BASEFONT>";
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static RawInterpolatedStringHandler Color(this ReadOnlySpan<char> text, int color) =>
|
||||||
|
$"<BASEFONT COLOR=#{color:X6}>{text}</BASEFONT>";
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static string Color(this string text, int color, int size) => $"<BASEFONT COLOR=#{color:X6} SIZE={size}>{text}</BASEFONT>";
|
public static string Color(this string text, int color, int size) => $"<BASEFONT COLOR=#{color:X6} SIZE={size}>{text}</BASEFONT>";
|
||||||
|
|
||||||
|
|
@ -30,37 +36,52 @@ public static class Html
|
||||||
public static string Color(this string text, string color) => $"<BASEFONT COLOR={color}>{text}</BASEFONT>";
|
public static string Color(this string text, string color) => $"<BASEFONT COLOR={color}>{text}</BASEFONT>";
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static string Color(this string text, string color, int size) => $"<BASEFONT COLOR={color} SIZE={size}>{text}</BASEFONT>";
|
public static string Color(this string text, string color, int size) =>
|
||||||
|
$"<BASEFONT COLOR={color} SIZE={size}>{text}</BASEFONT>";
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static string Center(this string text) => $"<CENTER>{text}</CENTER>";
|
public static string Center(this string text) => $"<CENTER>{text}</CENTER>";
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static string Center(this string text, int color) => $"<BASEFONT COLOR=#{color:X6}><CENTER>{text}</CENTER></BASEFONT>";
|
public static RawInterpolatedStringHandler Center(this ReadOnlySpan<char> text) => $"<CENTER>{text}</CENTER>";
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static string Center(this string text, int color, int size) => $"<BASEFONT COLOR=#{color:X6} SIZE={size}><CENTER>{text}</CENTER></BASEFONT>";
|
public static string Center(this string text, int color) =>
|
||||||
|
$"<BASEFONT COLOR=#{color:X6}><CENTER>{text}</CENTER></BASEFONT>";
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static string Center(this string text, string color) => $"<BASEFONT COLOR={color}><CENTER>{text}</CENTER></BASEFONT>";
|
public static RawInterpolatedStringHandler Center(this ReadOnlySpan<char> text, int color) =>
|
||||||
|
$"<BASEFONT COLOR=#{color:X6}><CENTER>{text}</CENTER></BASEFONT>";
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static string Center(this string text, string color, int size) => $"<BASEFONT COLOR={color} SIZE={size}><CENTER>{text}</CENTER></BASEFONT>";
|
public static string Center(this string text, int color, int size) =>
|
||||||
|
$"<BASEFONT COLOR=#{color:X6} SIZE={size}><CENTER>{text}</CENTER></BASEFONT>";
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static string Center(this string text, string color) =>
|
||||||
|
$"<BASEFONT COLOR={color}><CENTER>{text}</CENTER></BASEFONT>";
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static string Center(this string text, string color, int size) =>
|
||||||
|
$"<BASEFONT COLOR={color} SIZE={size}><CENTER>{text}</CENTER></BASEFONT>";
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static string Right(this string text) => $"<RIGHT>{text}</RIGHT>";
|
public static string Right(this string text) => $"<RIGHT>{text}</RIGHT>";
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static string Right(this string text, int color) => $"<BASEFONT COLOR=#{color:X6}><RIGHT>{text}</RIGHT></BASEFONT>";
|
public static string Right(this string text, int color) =>
|
||||||
|
$"<BASEFONT COLOR=#{color:X6}><RIGHT>{text}</RIGHT></BASEFONT>";
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static string Right(this string text, int color, int size) => $"<BASEFONT COLOR=#{color:X6} SIZE={size}><RIGHT>{text}</RIGHT></BASEFONT>";
|
public static string Right(this string text, int color, int size) =>
|
||||||
|
$"<BASEFONT COLOR=#{color:X6} SIZE={size}><RIGHT>{text}</RIGHT></BASEFONT>";
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static string Right(this string text, string color) => $"<BASEFONT COLOR={color}><RIGHT>{text}</RIGHT></BASEFONT>";
|
public static string Right(this string text, string color) => $"<BASEFONT COLOR={color}><RIGHT>{text}</RIGHT></BASEFONT>";
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static string Right(this string text, string color, int size) => $"<BASEFONT COLOR={color} SIZE={size}><RIGHT>{text}</RIGHT></BASEFONT>";
|
public static string Right(this string text, string color, int size) =>
|
||||||
|
$"<BASEFONT COLOR={color} SIZE={size}><RIGHT>{text}</RIGHT></BASEFONT>";
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static string EscapeHtml(this string input) =>
|
public static string EscapeHtml(this string input) =>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue