mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-22 04:53:29 +01:00
Color parsing improvements
- Added ColorHelper.TryFromHexString, a non-throwing version of FromHexString - Stopped the text formatter from throwing if a color can't be parsed
This commit is contained in:
parent
8eff529b9d
commit
de1fc28376
4 changed files with 33 additions and 8 deletions
|
@ -19,6 +19,10 @@ Additions
|
||||||
- Added Zero, One, Linear and Clamp to Easings
|
- Added Zero, One, Linear and Clamp to Easings
|
||||||
- Added GetRandomEntry and GetRandomWeightedEntry to SingleRandom
|
- Added GetRandomEntry and GetRandomWeightedEntry to SingleRandom
|
||||||
- Added the ability to draw single corners of AutoTiling's extended auto tiles
|
- Added the ability to draw single corners of AutoTiling's extended auto tiles
|
||||||
|
- Added ColorHelper.TryFromHexString, a non-throwing version of FromHexString
|
||||||
|
|
||||||
|
Improvements
|
||||||
|
- Stopped the text formatter throwing if a color can't be parsed
|
||||||
|
|
||||||
Fixes
|
Fixes
|
||||||
- Fixed TextInput not working correctly when using surrogate pairs
|
- Fixed TextInput not working correctly when using surrogate pairs
|
||||||
|
|
|
@ -44,7 +44,8 @@ namespace MLEM.Extended.Tiled {
|
||||||
/// <param name="key">The key by which to get a property</param>
|
/// <param name="key">The key by which to get a property</param>
|
||||||
/// <returns>The color property</returns>
|
/// <returns>The color property</returns>
|
||||||
public static Color GetColor(this TiledMapProperties properties, string key) {
|
public static Color GetColor(this TiledMapProperties properties, string key) {
|
||||||
return ColorHelper.FromHexString(properties.Get(key));
|
ColorHelper.TryFromHexString(properties.Get(key), out var val);
|
||||||
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
using System;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
|
|
||||||
|
@ -64,16 +65,34 @@ namespace MLEM.Extensions {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Parses a hexadecimal string into a color.
|
/// Parses a hexadecimal string into a color and throws a <see cref="FormatException"/> if parsing fails.
|
||||||
/// The string can either be formatted as RRGGBB or AARRGGBB and can optionally start with a <c>#</c>.
|
/// The string can either be formatted as RRGGBB or AARRGGBB and can optionally start with a <c>#</c>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="value">The string to parse.</param>
|
/// <param name="value">The string to parse.</param>
|
||||||
/// <returns>The resulting color.</returns>
|
/// <returns>The resulting color.</returns>
|
||||||
|
/// <exception cref="FormatException">Thrown if parsing fails.</exception>
|
||||||
public static Color FromHexString(string value) {
|
public static Color FromHexString(string value) {
|
||||||
|
if (!ColorHelper.TryFromHexString(value, out var val))
|
||||||
|
throw new FormatException($"Cannot parse hex string {value}");
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tries to parse a hexadecimal string into a color and returns whether a color was successfully parsed.
|
||||||
|
/// The string can either be formatted as RRGGBB or AARRGGBB and can optionally start with a <c>#</c>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="value">The string to parse.</param>
|
||||||
|
/// <param name="color">The resulting color.</param>
|
||||||
|
/// <returns>Whether parsing was successful.</returns>
|
||||||
|
public static bool TryFromHexString(string value, out Color color) {
|
||||||
if (value.StartsWith("#"))
|
if (value.StartsWith("#"))
|
||||||
value = value.Substring(1);
|
value = value.Substring(1);
|
||||||
var val = int.Parse(value, NumberStyles.HexNumber);
|
if (int.TryParse(value, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out var val)) {
|
||||||
return value.Length > 6 ? ColorHelper.FromHexRgba(val) : ColorHelper.FromHexRgb(val);
|
color = value.Length > 6 ? ColorHelper.FromHexRgba(val) : ColorHelper.FromHexRgb(val);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
color = default;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,7 +102,7 @@ namespace MLEM.Formatting {
|
||||||
this.Codes.Add(new Regex("<b>"), (f, m, r) => new FontCode(m, r, fnt => fnt.Bold));
|
this.Codes.Add(new Regex("<b>"), (f, m, r) => new FontCode(m, r, fnt => fnt.Bold));
|
||||||
this.Codes.Add(new Regex("<i>"), (f, m, r) => new FontCode(m, r, fnt => fnt.Italic));
|
this.Codes.Add(new Regex("<i>"), (f, m, r) => new FontCode(m, r, fnt => fnt.Italic));
|
||||||
this.Codes.Add(new Regex(@"<s(?: #([0-9\w]{6,8}) (([+-.0-9]*)))?>"), (f, m, r) => new ShadowCode(m, r,
|
this.Codes.Add(new Regex(@"<s(?: #([0-9\w]{6,8}) (([+-.0-9]*)))?>"), (f, m, r) => new ShadowCode(m, r,
|
||||||
m.Groups[1].Success ? ColorHelper.FromHexString(m.Groups[1].Value) : this.DefaultShadowColor,
|
ColorHelper.TryFromHexString(m.Groups[1].Value, out var color) ? color : this.DefaultShadowColor,
|
||||||
float.TryParse(m.Groups[2].Value, NumberStyles.Number, CultureInfo.InvariantCulture, out var offset) ? new Vector2(offset) : this.DefaultShadowOffset));
|
float.TryParse(m.Groups[2].Value, NumberStyles.Number, CultureInfo.InvariantCulture, out var offset) ? new Vector2(offset) : this.DefaultShadowOffset));
|
||||||
this.Codes.Add(new Regex("<u>"), (f, m, r) => new UnderlineCode(m, r, this.LineThickness, this.UnderlineOffset));
|
this.Codes.Add(new Regex("<u>"), (f, m, r) => new UnderlineCode(m, r, this.LineThickness, this.UnderlineOffset));
|
||||||
this.Codes.Add(new Regex("<st>"), (f, m, r) => new UnderlineCode(m, r, this.LineThickness, this.StrikethroughOffset));
|
this.Codes.Add(new Regex("<st>"), (f, m, r) => new UnderlineCode(m, r, this.LineThickness, this.StrikethroughOffset));
|
||||||
|
@ -111,7 +111,7 @@ namespace MLEM.Formatting {
|
||||||
this.Codes.Add(new Regex(@"<sup(?: ([+-.0-9]+))?>"), (f, m, r) => new SubSupCode(m, r,
|
this.Codes.Add(new Regex(@"<sup(?: ([+-.0-9]+))?>"), (f, m, r) => new SubSupCode(m, r,
|
||||||
float.TryParse(m.Groups[1].Value, NumberStyles.Number, CultureInfo.InvariantCulture, out var off) ? -off : this.DefaultSupOffset));
|
float.TryParse(m.Groups[1].Value, NumberStyles.Number, CultureInfo.InvariantCulture, out var off) ? -off : this.DefaultSupOffset));
|
||||||
this.Codes.Add(new Regex(@"<o(?: #([0-9\w]{6,8}) (([+-.0-9]*)))?>"), (f, m, r) => new OutlineCode(m, r,
|
this.Codes.Add(new Regex(@"<o(?: #([0-9\w]{6,8}) (([+-.0-9]*)))?>"), (f, m, r) => new OutlineCode(m, r,
|
||||||
m.Groups[1].Success ? ColorHelper.FromHexString(m.Groups[1].Value) : this.DefaultOutlineColor,
|
ColorHelper.TryFromHexString(m.Groups[1].Value, out var color) ? color : this.DefaultOutlineColor,
|
||||||
float.TryParse(m.Groups[2].Value, NumberStyles.Number, CultureInfo.InvariantCulture, out var thickness) ? thickness : this.DefaultOutlineThickness,
|
float.TryParse(m.Groups[2].Value, NumberStyles.Number, CultureInfo.InvariantCulture, out var thickness) ? thickness : this.DefaultOutlineThickness,
|
||||||
this.OutlineDiagonals));
|
this.OutlineDiagonals));
|
||||||
}
|
}
|
||||||
|
@ -124,12 +124,13 @@ namespace MLEM.Formatting {
|
||||||
this.Codes.Add(new Regex($"<c {c.Name}>"), (f, m, r) => new ColorCode(m, r, value));
|
this.Codes.Add(new Regex($"<c {c.Name}>"), (f, m, r) => new ColorCode(m, r, value));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.Codes.Add(new Regex(@"<c #([0-9\w]{6,8})>"), (f, m, r) => new ColorCode(m, r, ColorHelper.FromHexString(m.Groups[1].Value)));
|
this.Codes.Add(new Regex(@"<c #([0-9\w]{6,8})>"), (f, m, r) => new ColorCode(m, r,
|
||||||
|
ColorHelper.TryFromHexString(m.Groups[1].Value, out var color) ? color : Color.Red));
|
||||||
}
|
}
|
||||||
|
|
||||||
// animation codes
|
// animation codes
|
||||||
if (hasAnimations) {
|
if (hasAnimations) {
|
||||||
this.Codes.Add(new Regex(@"<a wobbly(?: ([+-.0-9]*) ([+-.0-9]*))?>"), (f, m, r) => new WobblyCode(m, r,
|
this.Codes.Add(new Regex("<a wobbly(?: ([+-.0-9]*) ([+-.0-9]*))?>"), (f, m, r) => new WobblyCode(m, r,
|
||||||
float.TryParse(m.Groups[1].Value, NumberStyles.Number, CultureInfo.InvariantCulture, out var mod) ? mod : this.DefaultWobblyModifier,
|
float.TryParse(m.Groups[1].Value, NumberStyles.Number, CultureInfo.InvariantCulture, out var mod) ? mod : this.DefaultWobblyModifier,
|
||||||
float.TryParse(m.Groups[2].Value, NumberStyles.Number, CultureInfo.InvariantCulture, out var heightMod) ? heightMod : this.DefaultWobblyHeight));
|
float.TryParse(m.Groups[2].Value, NumberStyles.Number, CultureInfo.InvariantCulture, out var heightMod) ? heightMod : this.DefaultWobblyHeight));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue